annotate Paper/source/rid-goto.c~ @ 47:e07c7952f237

add sources
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Wed, 23 Nov 2011 02:27:44 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 case RID_GOTO:
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 c_parser_consume_token (parser);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #ifndef noCbC
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 if ( c_parser_next_token_is (parser, CPP_NAME)
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 && c_parser_peek_2nd_token (parser)->type == CPP_SEMICOLON )
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #else
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 if (c_parser_next_token_is (parser, CPP_NAME))
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #endif
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 stmt = c_finish_goto_label (loc,
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 c_parser_peek_token (parser)->value);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 c_parser_consume_token (parser);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 }
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 else if (c_parser_next_token_is (parser, CPP_MULT))
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 tree val;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 c_parser_consume_token (parser);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 val = c_parser_expression (parser).value;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 mark_exp_read (val);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 stmt = c_finish_goto_ptr (loc, val);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 }
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 else
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #ifndef noCbC
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 if (c_parser_next_token_is (parser, CPP_NAME))
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 tree id = c_parser_peek_token (parser)->value;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 location_t loc = c_parser_peek_token (parser)->location;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 /** build_external_ref (id,RID_CbC_CODE , loc); **/
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 build_external_ref (loc, id, RID_CbC_CODE, &expr.original_type);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 expr = c_parser_expr_no_commas (parser, NULL);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 if (TREE_CODE(expr.value) == CALL_EXPR )
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 {
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 location_t loc = c_parser_peek_token (parser)->location;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 cbc_replace_arguments (loc, expr.value);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 TREE_TYPE(expr.value) = void_type_node;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 /*tree env = NULL_TREE;**/
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 CbC_IS_CbC_GOTO (expr.value) = 1;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 CALL_EXPR_TAILCALL (expr.value) = 1;
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 add_stmt(expr.value);
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 stmt = c_finish_return(loc, NULL_TREE, NULL_TREE); /* stmt = c_finish_return (0); */
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 }
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 else
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 c_parser_error (parser, "expected code segment jump or %<*%>");
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 }
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 #else
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 c_parser_error (parser, "expected identifier or %<*%>");
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 #endif
e07c7952f237 add sources
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 goto expect_semicolon;