diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-05-11 23:29:24 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-05-11 23:29:24 +0900 |
| commit | 95d1d002d90abc6e55eefc00a4844c5c7b4c16d9 (patch) | |
| tree | 047a9f4637e851bf58584d27a4a6114f004b2528 | |
| parent | 3483e360edb9eccdb1e3a75b894b1c7bd0f3b48b (diff) | |
| download | mruby-95d1d002d90abc6e55eefc00a4844c5c7b4c16d9.tar.gz mruby-95d1d002d90abc6e55eefc00a4844c5c7b4c16d9.zip | |
begin/end block should be isolated from outside; ported from CRuby r35620
| -rw-r--r-- | src/parse.y | 13 |
1 files changed, 9 insertions, 4 deletions
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 : { - $<num>$ = p->cmdarg_stack; + $<stack>$ = p->cmdarg_stack; CMDARG_PUSH(1); } call_args { - /* CMDARG_POP() */ - p->cmdarg_stack = $<num>1; + p->cmdarg_stack = $<stack>1; $$ = $2; } ; @@ -1848,10 +1848,15 @@ primary : literal $$ = new_fcall(p, $1, 0); } | keyword_begin + { + $<stack>1 = p->cmdarg_stack; + p->cmdarg_stack = 0; + } bodystmt keyword_end { - $$ = $2; + p->cmdarg_stack = $<stack>1; + $$ = $3; } | tLPAREN_ARG expr {p->lstate = EXPR_ENDARG;} rparen { |
