summaryrefslogtreecommitdiffhomepage
path: root/src/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2014-04-21 10:48:00 +0900
committerNobuyoshi Nakada <[email protected]>2014-04-21 10:48:00 +0900
commit367118b1b678b83869a9106191cb85197c9ef525 (patch)
tree32fc73abb5956ecfcac97f8256f90181b529f0b3 /src/parse.y
parent4654db4fdc3c83c6feb7d6e49afa61d341a74af7 (diff)
downloadmruby-367118b1b678b83869a9106191cb85197c9ef525.tar.gz
mruby-367118b1b678b83869a9106191cb85197c9ef525.zip
fix optional arguments in rhs
define optional arguments as argument variables in the rhs default expressions, as same as mere assignment expressions. Import ruby/ruby@01740f0c273c89f7bcff3d5014d73c8ff6fb1986
Diffstat (limited to 'src/parse.y')
-rw-r--r--src/parse.y12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/parse.y b/src/parse.y
index 1a3dadd61..fab6397e6 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -1075,7 +1075,7 @@ heredoc_end(parser_state *p)
%type <nd> brace_block cmd_brace_block do_block lhs none f_bad_arg
%type <nd> mlhs mlhs_list mlhs_post mlhs_basic mlhs_item mlhs_node mlhs_inner
%type <id> fsym sym basic_symbol operation operation2 operation3
-%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg
+%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_opt_asgn
%type <nd> heredoc words symbols
%token tUPLUS /* unary+ */
@@ -3052,10 +3052,16 @@ f_arg : f_arg_item
}
;
-f_opt : tIDENTIFIER '=' arg_value
+f_opt_asgn : tIDENTIFIER '='
{
local_add_f(p, $1);
- $$ = cons(nsym($1), $3);
+ $$ = $1;
+ }
+ ;
+
+f_opt : f_opt_asgn arg_value
+ {
+ $$ = cons(nsym($1), $2);
}
;