From 95d1d002d90abc6e55eefc00a4844c5c7b4c16d9 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 11 May 2012 23:29:24 +0900 Subject: begin/end block should be isolated from outside; ported from CRuby r35620 --- src/parse.y | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/parse.y b/src/parse.y index f3ab49e6f..5bce579e7 100644 --- a/src/parse.y +++ b/src/parse.y @@ -814,6 +814,7 @@ var_reference(parser_state *p, node *lhs) node *node; mrb_sym id; int num; + unsigned int stack; const struct vtable *vars; } @@ -1779,13 +1780,12 @@ call_args : command ; command_args : { - $$ = p->cmdarg_stack; + $$ = p->cmdarg_stack; CMDARG_PUSH(1); } call_args { - /* CMDARG_POP() */ - p->cmdarg_stack = $1; + p->cmdarg_stack = $1; $$ = $2; } ; @@ -1848,10 +1848,15 @@ primary : literal $$ = new_fcall(p, $1, 0); } | keyword_begin + { + $1 = p->cmdarg_stack; + p->cmdarg_stack = 0; + } bodystmt keyword_end { - $$ = $2; + p->cmdarg_stack = $1; + $$ = $3; } | tLPAREN_ARG expr {p->lstate = EXPR_ENDARG;} rparen { -- cgit v1.2.3