diff options
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 49 |
1 files changed, 24 insertions, 25 deletions
@@ -426,21 +426,13 @@ expr : kRETURN ret_args yyerror("return appeared outside of method"); $$ = NEW_RETURN($2); } - | kBREAK + | kBREAK ret_args { - $$ = NEW_BREAK(); + $$ = NEW_BREAK($2); } - | kNEXT - { - $$ = NEW_NEXT(); - } - | kREDO - { - $$ = NEW_REDO(); - } - | kRETRY + | kNEXT ret_args { - $$ = NEW_RETRY(); + $$ = NEW_NEXT($2); } | command_call | expr kAND expr @@ -1142,19 +1134,6 @@ primary : literal { $$ = NEW_HASH($2); } - | kRETURN '(' ret_args ')' - { - if (!compile_for_eval && !in_def && !in_single) - yyerror("return appeared outside of method"); - value_expr($3); - $$ = NEW_RETURN($3); - } - | kRETURN '(' ')' - { - if (!compile_for_eval && !in_def && !in_single) - yyerror("return appeared outside of method"); - $$ = NEW_RETURN(0); - } | kRETURN { if (!compile_for_eval && !in_def && !in_single) @@ -1359,6 +1338,22 @@ primary : literal local_pop(); in_single--; } + | kBREAK + { + $$ = NEW_BREAK(0); + } + | kNEXT + { + $$ = NEW_NEXT(0); + } + | kREDO + { + $$ = NEW_REDO(); + } + | kRETRY + { + $$ = NEW_RETRY(); + } then : term | kTHEN @@ -1399,6 +1394,10 @@ opt_block_var : none { $$ = $2; } + | '<' f_args '>' + { + $$ = (NODE*)2; + } do_block : kDO_BLOCK |