diff --git a/lib/parser/lexer.rl b/lib/parser/lexer.rl index 953706cfb..52efae944 100644 --- a/lib/parser/lexer.rl +++ b/lib/parser/lexer.rl @@ -833,6 +833,8 @@ class Parser::Lexer if !@static_env.nil? && @static_env.declared?(tok) fnext expr_endfn; fbreak; + elsif @version >= 33 && tok =~ /\A_[1-9]\z/ + fnext expr_endfn; fbreak; else fnext *arg_or_cmdarg(cmd_state); fbreak; end diff --git a/test/test_parser.rb b/test/test_parser.rb index e1c641137..c64e93508 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -10468,6 +10468,27 @@ def test_reserved_for_numparam__since_30 end end + def test_numparam_ruby_bug_19025 + assert_diagnoses_many( + [ + [:warning, :ambiguous_prefix, { :prefix => '**' }], + [:error, :unexpected_token, { :token => 'tDSTAR' }] + ], + 'p { [_1 **2] }', + %w[3.0 3.1 3.2]) + + assert_parses( + s(:numblock, + s(:send, nil, :p), 1, + s(:array, + s(:send, + s(:lvar, :_1), :**, + s(:int, 2)))), + 'p { [_1 **2] }', + %q{}, + SINCE_3_3) + end + def test_endless_setter assert_diagnoses( [:error, :endless_setter],