diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-08 05:58:06 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-08 05:58:06 +0000 |
commit | 4d436328524b23cfd446191cb391f17450a872a0 (patch) | |
tree | e14e58675e018849934b1849d91389e6f65e6112 /parse.y | |
parent | b1cd416c1a446f2e47e964ee6e9d77461a16427d (diff) | |
download | ruby-4d436328524b23cfd446191cb391f17450a872a0.tar.gz |
* 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
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 66 |
1 files changed, 65 insertions, 1 deletions
@@ -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 |