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