Skip to content

Commit 45dce19

Browse files
committed
parse.y: Parameterize argument list rules
Parametrize `block_param` and `f_args` into `arg-list` and `tail-only-args`. Since the pattern for `pre_args` alone differs between `opt_comma` and `excessed_comma`, retain it within each rule.
1 parent 0980de4 commit 45dce19

1 file changed

Lines changed: 36 additions & 84 deletions

File tree

parse.y

Lines changed: 36 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -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;} '=';
49764976
block_args_tail : args_tail_basic(primary_value)
49774977
;
49784978

4979+
block_args-opt_tail : opt_args_tail(block_args_tail)
4980+
;
4981+
49794982
excessed_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

50655005
opt_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+
63946346
args_forward : tBDOT3
63956347
{
63966348
$$ = idFWD_KWREST;

0 commit comments

Comments
 (0)