diff options
Diffstat (limited to 'mrbgems/mruby-compiler/core/parse.y')
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index b740d0ed2..62fff304e 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -2397,6 +2397,22 @@ paren_args : '(' opt_call_args ')' { $$ = $2; } + | '(' args comma tBDOT3 rparen + { +#if 1 + mrb_sym r = MRB_OPSYM(mul); + mrb_sym b = MRB_OPSYM(and); + $$ = cons(push($2, new_splat(p, new_lvar(p, r))), + new_block_arg(p, new_lvar(p, b))); +#else + mrb_sym r = MRB_OPSYM(mul); + mrb_sym k = MRB_OPSYM(pow); + mrb_sym b = MRB_OPSYM(and); + $$ = cons(list2(push($2, new_splat(p, new_lvar(p, r))), + new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))), + new_block_arg(p, new_lvar(p, b))); +#endif + } | '(' tBDOT3 rparen { #if 1 @@ -3493,6 +3509,24 @@ f_arglist_paren : '(' f_args rparen p->lstate = EXPR_BEG; p->cmd_start = TRUE; } + | '(' f_arg ',' tBDOT3 rparen + { +#if 1 + /* til real keyword args implemented */ + mrb_sym r = MRB_OPSYM(mul); + mrb_sym b = MRB_OPSYM(and); + local_add_f(p, r); + $$ = new_args(p, $2, 0, r, 0, + new_args_tail(p, 0, 0, b)); +#else + mrb_sym r = MRB_OPSYM(mul); + mrb_sym k = MRB_OPSYM(pow); + mrb_sym b = MRB_OPSYM(and); + local_add_f(p, r); local_add_f(p, k); + $$ = new_args(p, $2, 0, r, 0, + new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); +#endif + } | '(' tBDOT3 rparen { #if 1 |
