lib/ruby_parser.yy in ruby_parser-3.16.0 vs lib/ruby_parser.yy in ruby_parser-3.17.0
- old
+ new
@@ -1064,11 +1064,31 @@
paren_args: tLPAREN2 opt_call_args rparen
{
_, args, _ = val
result = args
}
+#if V >= 27
+ | tLPAREN2 args tCOMMA args_forward rparen
+ {
+ yyerror "Unexpected ..." unless
+ self.lexer.is_local_id(:"*") &&
+ self.lexer.is_local_id(:"**") &&
+ self.lexer.is_local_id(:"&")
+ result = call_args val
+ }
+ | tLPAREN2 args_forward rparen
+ {
+ yyerror "Unexpected ..." unless
+ self.lexer.is_local_id(:"*") &&
+ self.lexer.is_local_id(:"**") &&
+ self.lexer.is_local_id(:"&")
+
+ result = call_args val
+ }
+#endif
+
opt_paren_args: none
| paren_args
opt_call_args: none
| call_args
@@ -2364,10 +2384,26 @@
{
result = val[1]
self.lexer.lex_state = EXPR_BEG
self.lexer.command_start = true
}
+#if V >= 27
+ | tLPAREN2 f_arg tCOMMA args_forward rparen
+ {
+ result = args val
+
+ self.lexer.lex_state = EXPR_BEG
+ self.lexer.command_start = true
+ }
+ | tLPAREN2 args_forward rparen
+ {
+ result = args val
+
+ self.lexer.lex_state = EXPR_BEG
+ self.lexer.command_start = true
+ }
+#endif
| {
result = self.in_kwarg
self.in_kwarg = true
self.lexer.lex_state |= EXPR_LABEL
}
@@ -2463,10 +2499,17 @@
|
{
result = args val
}
+#if V >= 27
+ args_forward: tBDOT3
+ {
+ result = s(:forward_args).line lexer.lineno
+ }
+#endif
+
f_bad_arg: tCONSTANT
{
yyerror "formal argument cannot be a constant"
}
| tIVAR
@@ -2611,9 +2654,10 @@
result = :"**#{name}"
}
| kwrest_mark
{
result = :"**"
+ self.env[result] = :lvar
}
#if V == 20
f_opt: tIDENTIFIER tEQL arg_value
#elif V == 21