diff options
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 |