summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-compiler/core/parse.y')
-rw-r--r--mrbgems/mruby-compiler/core/parse.y34
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