From 4d436328524b23cfd446191cb391f17450a872a0 Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 8 Jun 2007 05:58:06 +0000 Subject: * parse.y (call_args): allow splat argument after unpacked assocs like 1.8 does. * parse.y (call_args): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) (limited to 'parse.y') diff --git a/parse.y b/parse.y index be644f26d0..0990ba68c8 100644 --- a/parse.y +++ b/parse.y @@ -2257,6 +2257,18 @@ call_args : command $$ = arg_add_optblock($$, $2); %*/ } + | assocs ',' tSTAR arg_value opt_block_arg + { + /*%%%*/ + $$ = NEW_LIST(NEW_HASH($1)); + $$ = arg_concat($$, $4); + $$ = arg_blk_pass($$, $5); + /*% + $$ = arg_add_assocs(arg_new(), $1); + $$ = arg_add_star($$, $4); + $$ = arg_add_optblock($$, $5); + %*/ + } | args ',' assocs opt_block_arg { /*%%%*/ @@ -2266,6 +2278,18 @@ call_args : command $$ = arg_add_optblock(arg_add_assocs($1, $3), $4); %*/ } + | args ',' assocs ',' tSTAR arg_value opt_block_arg + { + /*%%%*/ + $$ = arg_append($1, NEW_HASH($3)); + $$ = arg_concat($$, $6); + $$ = arg_blk_pass($$, $7); + /*% + $$ = arg_add_assocs($1, $3); + $$ = arg_add_star($$, $6); + $$ = arg_add_optblock($$, $7); + %*/ + } | block_arg /*%c%*/ /*%c @@ -2297,7 +2321,20 @@ call_args2 : arg_value ',' args opt_block_arg $$ = NEW_LIST(NEW_HASH($1)); $$ = arg_blk_pass($$, $2); /*% - $$ = arg_add_optblock(arg_add_assocs(arg_new(), $1), $2); + $$ = arg_add_assocs(arg_new(), $1); + $$ = arg_add_optblock($$, $2); + %*/ + } + | assocs ',' tSTAR arg_value opt_block_arg + { + /*%%%*/ + $$ = NEW_LIST(NEW_HASH($1)); + $$ = arg_concat($$, $4); + $$ = arg_blk_pass($$, $5); + /*% + $$ = arg_add_assocs(arg_new(), $1); + $$ = arg_add_star($$, $4); + $$ = arg_add_optblock($$, $5); %*/ } | arg_value ',' assocs opt_block_arg @@ -2310,6 +2347,18 @@ call_args2 : arg_value ',' args opt_block_arg $$ = arg_add_optblock($$, $4); %*/ } + | arg_value ',' assocs ',' tSTAR arg_value opt_block_arg + { + /*%%%*/ + $$ = arg_append(NEW_LIST($1), NEW_HASH($3)); + $$ = arg_concat($$, $6); + $$ = arg_blk_pass($$, $7); + /*% + $$ = arg_add_assocs(arg_add(arg_new(), $1), $3); + $$ = arg_add_star($$, $6); + $$ = arg_add_optblock($$, $7); + %*/ + } | arg_value ',' args ',' assocs opt_block_arg { /*%%%*/ @@ -2320,6 +2369,18 @@ call_args2 : arg_value ',' args opt_block_arg $$ = arg_add_optblock($$, $6); %*/ } + | arg_value ',' args ',' assocs ',' tSTAR arg_value opt_block_arg + { + /*%%%*/ + $$ = arg_append(list_concat(NEW_LIST($1),$3), NEW_HASH($5)); + $$ = arg_concat($$, $8); + $$ = arg_blk_pass($$, $9); + /*% + $$ = arg_add_assocs(arg_prepend($3, $1), $5); + $$ = arg_add_star($$, $8); + $$ = arg_add_optblock($$, $9); + %*/ + } | block_arg ; @@ -2371,6 +2432,9 @@ opt_block_arg : ',' block_arg $$ = $2; } | none + { + $$ = 0; + } ; args : arg_value -- cgit v1.2.3