From 01740f0c273c89f7bcff3d5014d73c8ff6fb1986 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 5 Mar 2014 06:56:49 +0000 Subject: parse.y: optional arguments in rhs * parse.y (f_arg_asgn): define optional arguments as argument variables in the rhs default expressions. [ruby-core:61299] [Bug #9593] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'parse.y') diff --git a/parse.y b/parse.y index 9b7869b359..f7f41c6111 100644 --- a/parse.y +++ b/parse.y @@ -784,7 +784,7 @@ static void token_info_pop(struct parser_params*, const char *token); %type mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner %type fsym keyword_variable user_variable sym symbol operation operation2 operation3 %type cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg -%type f_kwrest f_label +%type f_kwrest f_label f_arg_asgn /*%%%*/ /*% %type program reswords then do dot_or_colon @@ -4548,9 +4548,15 @@ f_norm_arg : f_bad_arg } ; -f_arg_item : f_norm_arg +f_arg_asgn : f_norm_arg { arg_var(get_id($1)); + $$ = $1; + } + ; + +f_arg_item : f_arg_asgn + { /*%%%*/ $$ = NEW_ARGS_AUX($1, 1); /*% @@ -4708,9 +4714,8 @@ f_kwrest : kwrest_mark tIDENTIFIER } ; -f_opt : f_norm_arg '=' arg_value +f_opt : f_arg_asgn '=' arg_value { - arg_var(get_id($1)); $$ = assignable($1, $3); /*%%%*/ $$ = NEW_OPT_ARG(0, $$); @@ -4720,9 +4725,8 @@ f_opt : f_norm_arg '=' arg_value } ; -f_block_opt : f_norm_arg '=' primary_value +f_block_opt : f_arg_asgn '=' primary_value { - arg_var(get_id($1)); $$ = assignable($1, $3); /*%%%*/ $$ = NEW_OPT_ARG(0, $$); -- cgit v1.2.3