1
|
1 case RID_CbC_RET:
|
|
2
|
|
3 stmt = c_begin_stmt_expr ();
|
|
4
|
|
5 /* create label declaration. */
|
|
6 label = get_identifier ("_cbc_exit0");
|
|
7 tlab = declare_label (label);
|
|
8 add_stmt (build_stmt (DECL_EXPR, tlab));
|
|
9
|
|
10 /* declare retval. (int retval;) */
|
|
11 tree decl_cond =
|
|
12 build_decl(VAR_DECL,get_identifier ("retval"),
|
|
13 TREE_TYPE(current_function_decl));
|
|
14 pushdecl (decl_cond);
|
|
15
|
|
16 /* define nested function. */
|
|
17 decl = cbc_define_nested_code(label, decl_cond);
|
|
18
|
|
19 /* define if-ed goto label and return statement. */
|
|
20 cbc_define_if_closed_goto (label, decl_cond);
|
|
21
|
|
22 /* get pointer to nested function. */
|
|
23 value = build_addr (decl , current_function_decl);
|
|
24 add_stmt (value);
|
|
25
|
|
26 expr.value = c_finish_stmt_expr (stmt);
|