@@ -2773,7 +2773,7 @@ rb_parser_ary_free(rb_parser_t *p, rb_parser_ary_t *ary)
27732773%type <node> if_tail opt_else case_body case_args cases opt_rescue exc_list exc_var opt_ensure
27742774%type <node> args arg_splat call_args opt_call_args
27752775%type <node> paren_args opt_paren_args
2776- %type <node_args> args_tail block_args_tail
2776+ %type <node_args> args_tail block_args_tail f_args-opt_tail block_args-opt_tail
27772777%type <node> command_args aref_args
27782778%type <node_block_pass> opt_block_arg block_arg
27792779%type <node> var_ref var_lhs
@@ -4976,6 +4976,9 @@ f_eq : {p->ctxt.in_argdef = 0;} '=';
49764976block_args_tail : args_tail_basic(primary_value)
49774977 ;
49784978
4979+ block_args-opt_tail : opt_args_tail(block_args_tail)
4980+ ;
4981+
49794982excessed_comma : ','
49804983 {
49814984 /* magic number for rest_id in iseq_set_arguments() */
@@ -4984,36 +4987,7 @@ excessed_comma : ','
49844987 }
49854988 ;
49864989
4987- block_param : f_arg[pre] ',' f_opt_arg(primary_value)[opt] ',' f_rest_arg[rest] opt_args_tail(block_args_tail)[tail]
4988- {
4989- $$ = new_args(p, $pre, $opt, $rest, 0, $tail, &@$);
4990- /*% ripper: params!($:pre, $:opt, $:rest, Qnil, *$:tail[0..2]) %*/
4991- }
4992- | f_arg[pre] ',' f_opt_arg(primary_value)[opt] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
4993- {
4994- $$ = new_args(p, $pre, $opt, $rest, $post, $tail, &@$);
4995- /*% ripper: params!($:pre, $:opt, $:rest, $:post, *$:tail[0..2]) %*/
4996- }
4997- | f_arg[pre] ',' f_opt_arg(primary_value)[opt] opt_args_tail(block_args_tail)[tail]
4998- {
4999- $$ = new_args(p, $pre, $opt, 0, 0, $tail, &@$);
5000- /*% ripper: params!($:pre, $:opt, Qnil, Qnil, *$:tail[0..2]) %*/
5001- }
5002- | f_arg[pre] ',' f_opt_arg(primary_value)[opt] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
5003- {
5004- $$ = new_args(p, $pre, $opt, 0, $post, $tail, &@$);
5005- /*% ripper: params!($:pre, $:opt, Qnil, $:post, *$:tail[0..2]) %*/
5006- }
5007- | f_arg[pre] ',' f_rest_arg[rest] opt_args_tail(block_args_tail)[tail]
5008- {
5009- $$ = new_args(p, $pre, 0, $rest, 0, $tail, &@$);
5010- /*% ripper: params!($:pre, Qnil, $:rest, Qnil, *$:tail[0..2]) %*/
5011- }
5012- | f_arg[pre] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
5013- {
5014- $$ = new_args(p, $pre, 0, $rest, $post, $tail, &@$);
5015- /*% ripper: params!($:pre, Qnil, $:rest, $:post, *$:tail[0..2]) %*/
5016- }
4990+ block_param : args-list(primary_value, block_args-opt_tail)
50174991 | f_arg[pre] excessed_comma
50184992 {
50194993 $$ = new_empty_args_tail(p, &@excessed_comma);
@@ -5025,41 +4999,7 @@ block_param : f_arg[pre] ',' f_opt_arg(primary_value)[opt] ',' f_rest_arg[rest]
50254999 $$ = new_args(p, $pre, 0, 0, 0, $tail, &@$);
50265000 /*% ripper: params!($:pre, Qnil, Qnil, Qnil, *$:tail[0..2]) %*/
50275001 }
5028- | f_opt_arg(primary_value)[opt] ',' f_rest_arg[rest] opt_args_tail(block_args_tail)[tail]
5029- {
5030- $$ = new_args(p, 0, $opt, $rest, 0, $tail, &@$);
5031- /*% ripper: params!(Qnil, $:opt, $:rest, Qnil, *$:tail[0..2]) %*/
5032- }
5033- | f_opt_arg(primary_value)[opt] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
5034- {
5035- $$ = new_args(p, 0, $opt, $rest, $post, $tail, &@$);
5036- /*% ripper: params!(Qnil, $:opt, $:rest, $:post, *$:tail[0..2]) %*/
5037- }
5038- | f_opt_arg(primary_value)[opt] opt_args_tail(block_args_tail)[tail]
5039- {
5040- $$ = new_args(p, 0, $opt, 0, 0, $tail, &@$);
5041- /*% ripper: params!(Qnil, $:opt, Qnil, Qnil, *$:tail[0..2]) %*/
5042- }
5043- | f_opt_arg(primary_value)[opt] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
5044- {
5045- $$ = new_args(p, 0, $opt, 0, $post, $tail, &@$);
5046- /*% ripper: params!(Qnil, $:opt, Qnil, $:post, *$:tail[0..2]) %*/
5047- }
5048- | f_rest_arg[rest] opt_args_tail(block_args_tail)[tail]
5049- {
5050- $$ = new_args(p, 0, 0, $rest, 0, $tail, &@$);
5051- /*% ripper: params!(Qnil, Qnil, $:rest, Qnil, *$:tail[0..2]) %*/
5052- }
5053- | f_rest_arg[rest] ',' f_arg[post] opt_args_tail(block_args_tail)[tail]
5054- {
5055- $$ = new_args(p, 0, 0, $rest, $post, $tail, &@$);
5056- /*% ripper: params!(Qnil, Qnil, $:rest, $:post, *$:tail[0..2]) %*/
5057- }
5058- | block_args_tail[tail]
5059- {
5060- $$ = new_args(p, 0, 0, 0, 0, $tail, &@$);
5061- /*% ripper: params!(Qnil, Qnil, Qnil, Qnil, *$:tail[0..2]) %*/
5062- }
5002+ | tail-only-args(block_args_tail)
50635003 ;
50645004
50655005opt_block_param_def : none
@@ -6318,79 +6258,91 @@ args_tail : args_tail_basic(arg_value)
63186258 }
63196259 ;
63206260
6321- f_args : f_arg[pre] ',' f_opt_arg(arg_value)[opt] ',' f_rest_arg[rest] opt_args_tail(args_tail)[tail]
6261+ %rule args-list(value, tail) <node_args>
6262+ : f_arg[pre] ',' f_opt_arg(value)[opt] ',' f_rest_arg[rest] tail
63226263 {
63236264 $$ = new_args(p, $pre, $opt, $rest, 0, $tail, &@$);
63246265 /*% ripper: params!($:pre, $:opt, $:rest, Qnil, *$:tail[0..2]) %*/
63256266 }
6326- | f_arg[pre] ',' f_opt_arg(arg_value )[opt] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6267+ | f_arg[pre] ',' f_opt_arg(value )[opt] ',' f_rest_arg[rest] ',' f_arg[post] tail
63276268 {
63286269 $$ = new_args(p, $pre, $opt, $rest, $post, $tail, &@$);
63296270 /*% ripper: params!($:pre, $:opt, $:rest, $:post, *$:tail[0..2]) %*/
63306271 }
6331- | f_arg[pre] ',' f_opt_arg(arg_value )[opt] opt_args_tail(args_tail)[ tail]
6272+ | f_arg[pre] ',' f_opt_arg(value )[opt] tail
63326273 {
63336274 $$ = new_args(p, $pre, $opt, 0, 0, $tail, &@$);
63346275 /*% ripper: params!($:pre, $:opt, Qnil, Qnil, *$:tail[0..2]) %*/
63356276 }
6336- | f_arg[pre] ',' f_opt_arg(arg_value )[opt] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6277+ | f_arg[pre] ',' f_opt_arg(value )[opt] ',' f_arg[post] tail
63376278 {
63386279 $$ = new_args(p, $pre, $opt, 0, $post, $tail, &@$);
63396280 /*% ripper: params!($:pre, $:opt, Qnil, $:post, *$:tail[0..2]) %*/
63406281 }
6341- | f_arg[pre] ',' f_rest_arg[rest] opt_args_tail(args_tail)[ tail]
6282+ | f_arg[pre] ',' f_rest_arg[rest] tail
63426283 {
63436284 $$ = new_args(p, $pre, 0, $rest, 0, $tail, &@$);
63446285 /*% ripper: params!($:pre, Qnil, $:rest, Qnil, *$:tail[0..2]) %*/
63456286 }
6346- | f_arg[pre] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6287+ | f_arg[pre] ',' f_rest_arg[rest] ',' f_arg[post] tail
63476288 {
63486289 $$ = new_args(p, $pre, 0, $rest, $post, $tail, &@$);
63496290 /*% ripper: params!($:pre, Qnil, $:rest, $:post, *$:tail[0..2]) %*/
63506291 }
6351- | f_arg[pre] opt_args_tail(args_tail)[tail]
6352- {
6353- $$ = new_args(p, $pre, 0, 0, 0, $tail, &@$);
6354- /*% ripper: params!($:pre, Qnil, Qnil, Qnil, *$:tail[0..2]) %*/
6355- }
6356- | f_opt_arg(arg_value)[opt] ',' f_rest_arg[rest] opt_args_tail(args_tail)[tail]
6292+ | f_opt_arg(value)[opt] ',' f_rest_arg[rest] tail
63576293 {
63586294 $$ = new_args(p, 0, $opt, $rest, 0, $tail, &@$);
63596295 /*% ripper: params!(Qnil, $:opt, $:rest, Qnil, *$:tail[0..2]) %*/
63606296 }
6361- | f_opt_arg(arg_value )[opt] ',' f_rest_arg[rest] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6297+ | f_opt_arg(value )[opt] ',' f_rest_arg[rest] ',' f_arg[post] tail
63626298 {
63636299 $$ = new_args(p, 0, $opt, $rest, $post, $tail, &@$);
63646300 /*% ripper: params!(Qnil, $:opt, $:rest, $:post, *$:tail[0..2]) %*/
63656301 }
6366- | f_opt_arg(arg_value )[opt] opt_args_tail(args_tail)[ tail]
6302+ | f_opt_arg(value )[opt] tail
63676303 {
63686304 $$ = new_args(p, 0, $opt, 0, 0, $tail, &@$);
63696305 /*% ripper: params!(Qnil, $:opt, Qnil, Qnil, *$:tail[0..2]) %*/
63706306 }
6371- | f_opt_arg(arg_value )[opt] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6307+ | f_opt_arg(value )[opt] ',' f_arg[post] tail
63726308 {
63736309 $$ = new_args(p, 0, $opt, 0, $post, $tail, &@$);
63746310 /*% ripper: params!(Qnil, $:opt, Qnil, $:post, *$:tail[0..2]) %*/
63756311 }
6376- | f_rest_arg[rest] opt_args_tail(args_tail)[ tail]
6312+ | f_rest_arg[rest] tail
63776313 {
63786314 $$ = new_args(p, 0, 0, $rest, 0, $tail, &@$);
63796315 /*% ripper: params!(Qnil, Qnil, $:rest, Qnil, *$:tail[0..2]) %*/
63806316 }
6381- | f_rest_arg[rest] ',' f_arg[post] opt_args_tail(args_tail)[ tail]
6317+ | f_rest_arg[rest] ',' f_arg[post] tail
63826318 {
63836319 $$ = new_args(p, 0, 0, $rest, $post, $tail, &@$);
63846320 /*% ripper: params!(Qnil, Qnil, $:rest, $:post, *$:tail[0..2]) %*/
63856321 }
6386- | args_tail[tail]
6322+ ;
6323+
6324+ %rule tail-only-args(tail) <node_args>
6325+ : tail
63876326 {
63886327 $$ = new_args(p, 0, 0, 0, 0, $tail, &@$);
63896328 /*% ripper: params!(Qnil, Qnil, Qnil, Qnil, *$:tail[0..2]) %*/
63906329 }
6330+ ;
6331+
6332+ f_args-opt_tail : opt_args_tail(args_tail)
6333+ ;
6334+
6335+ f_args : args-list(arg_value, f_args-opt_tail)
6336+ | f_arg[pre] f_args-opt_tail[tail]
6337+ {
6338+ $$ = new_args(p, $pre, 0, 0, 0, $tail, &@$);
6339+ /*% ripper: params!($:pre, Qnil, Qnil, Qnil, *$:tail[0..2]) %*/
6340+ }
6341+ | tail-only-args(args_tail)
63916342 | f_empty_arg
63926343 ;
63936344
6345+
63946346args_forward : tBDOT3
63956347 {
63966348 $$ = idFWD_KWREST;
0 commit comments