diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-12-21 22:41:32 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-12-21 22:41:32 +0900 |
| commit | 06e09fc7a9e88b677ec2f7b2806975536c9a104d (patch) | |
| tree | 84fce725f6a452717872a3b96e08107048c257fd /mrbgems/mruby-compiler/core/parse.y | |
| parent | 2fe78a0c7c4456496ce54a4dc4ed38d8ef1ce664 (diff) | |
| download | mruby-06e09fc7a9e88b677ec2f7b2806975536c9a104d.tar.gz mruby-06e09fc7a9e88b677ec2f7b2806975536c9a104d.zip | |
Numbered parameters should not be available in the lambda bodies.
`mruby` does not warn like `CRuby` for cases like #4893.
Fix #4890, fix #4891, fix #4893.
Diffstat (limited to 'mrbgems/mruby-compiler/core/parse.y')
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 2580b7ba5..6abc6d820 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -838,7 +838,7 @@ new_block_arg(parser_state *p, node *a) } static node* -setup_args(parser_state *p, node *a) +setup_numparams(parser_state *p, node *a) { int nvars = intn(p->nvars->cdr); if (nvars > 0) { @@ -847,7 +847,8 @@ setup_args(parser_state *p, node *a) // m || opt || rest || tail if (a && (a->car || (a->cdr && a->cdr->car) || (a->cdr->cdr && a->cdr->cdr->car) || (a->cdr->cdr->cdr->cdr && a->cdr->cdr->cdr->cdr->car))) { yyerror(p, "ordinary parameter is defined"); - } else { + } + else { node* args = 0; for (i = nvars; i > 0; i--) { char buf[3]; @@ -869,7 +870,7 @@ setup_args(parser_state *p, node *a) static node* new_block(parser_state *p, node *a, node *b) { - a = setup_args(p, a); + a = setup_numparams(p, a); return list4((node*)NODE_BLOCK, locals_node(p), a, b); } @@ -877,7 +878,6 @@ new_block(parser_state *p, node *a, node *b) static node* new_lambda(parser_state *p, node *a, node *b) { - a = setup_args(p, a); return list4((node*)NODE_LAMBDA, locals_node(p), a, b); } @@ -2480,7 +2480,6 @@ primary : literal | tLAMBDA { local_nest(p); - nvars_nest(p); $<num>$ = p->lpar_beg; p->lpar_beg = ++p->paren_nest; } @@ -2494,7 +2493,6 @@ primary : literal p->lpar_beg = $<num>2; $$ = new_lambda(p, $3, $5); local_unnest(p); - nvars_unnest(p); p->cmdarg_stack = $<stack>4; CMDARG_LEXPOP(); } |
