summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-11 23:29:24 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-11 23:29:24 +0900
commit95d1d002d90abc6e55eefc00a4844c5c7b4c16d9 (patch)
tree047a9f4637e851bf58584d27a4a6114f004b2528 /src
parent3483e360edb9eccdb1e3a75b894b1c7bd0f3b48b (diff)
downloadmruby-95d1d002d90abc6e55eefc00a4844c5c7b4c16d9.tar.gz
mruby-95d1d002d90abc6e55eefc00a4844c5c7b4c16d9.zip
begin/end block should be isolated from outside; ported from CRuby r35620
Diffstat (limited to 'src')
-rw-r--r--src/parse.y13
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
{