diff --git a/parse.y b/parse.y index e203549..b0a7cc4 100644 --- a/parse.y +++ b/parse.y @@ -779,7 +779,7 @@ static void token_info_pop(struct parser_params*, const char *token); %type command_asgn mrhs mrhs_arg superclass block_call block_command %type f_block_optarg f_block_opt %type f_arglist f_args f_arg f_arg_item f_optarg f_marg f_marg_list f_margs -%type assoc_list assocs assoc undef_list backref string_dvar for_var +%type assoc_list assocs assocs_no_comma assoc undef_list backref string_dvar for_var %type block_param opt_block_param block_param_def f_opt %type f_kwarg f_kw f_block_kwarg f_block_kw %type bv_decls opt_bv_decl bvar @@ -4893,7 +4893,7 @@ singleton : var_ref ; assoc_list : none - | assocs trailer + | assocs_no_comma trailer { /*%%%*/ $$ = $1; @@ -4920,6 +4920,23 @@ assocs : assoc } ; +assocs_no_comma : assoc + /*%c%*/ + /*%c + { + $$ = rb_ary_new3(1, $1); + } + %*/ + | assocs_no_comma assoc_seperator assoc + { + /*%%%*/ + $$ = list_concat($1, $3); + /*% + $$ = rb_ary_push($1, $3); + %*/ + } + ; + assoc : arg_value tASSOC arg_value { /*%%%*/ @@ -4991,7 +5008,10 @@ rbracket : opt_nl ']' ; trailer : /* none */ - | '\n' + | assoc_seperator + ; + +assoc_seperator : '\n' | ',' ;