summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-05-15 12:50:02 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-05-15 14:59:11 +0900
commit71c166e11e761dcaaa943f9b94da38f86ada1bdb (patch)
treeb34f5975ba8ecdb27fce3a8c9231932444e32b60
parente89b87508160868bd431218872d0d5b7b15bc57b (diff)
Fixed argument forwarding in reserved word method [Bug #16854]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3112
-rw-r--r--parse.y7
-rw-r--r--test/ruby/test_syntax.rb5
2 files changed, 7 insertions, 5 deletions
diff --git a/parse.y b/parse.y
index 6b378b0697..0ac430456d 100644
--- a/parse.y
+++ b/parse.y
@@ -2152,10 +2152,6 @@ fname : tIDENTIFIER
$$ = $1;
}
| reswords
- {
- SET_LEX_STATE(EXPR_ENDFN);
- $$ = $1;
- }
;
fitem : fname
@@ -8834,11 +8830,12 @@ parse_ident(struct parser_params *p, int c, int cmd_state)
kw = rb_reserved_word(tok(p), toklen(p));
if (kw) {
enum lex_state_e state = p->lex.state;
- SET_LEX_STATE(kw->state);
if (IS_lex_state_for(state, EXPR_FNAME)) {
+ SET_LEX_STATE(EXPR_ENDFN);
set_yylval_name(rb_intern2(tok(p), toklen(p)));
return kw->id[0];
}
+ SET_LEX_STATE(kw->state);
if (IS_lex_state(EXPR_BEG)) {
p->command_start = TRUE;
}
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index 23061e364b..d419fc87a0 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1503,6 +1503,11 @@ eom
def test_argument_forwarding
assert_valid_syntax('def foo(...) bar(...) end')
assert_valid_syntax('def foo(...) end')
+ assert_valid_syntax('def ==(...) end')
+ assert_valid_syntax('def [](...) end')
+ assert_valid_syntax('def nil(...) end')
+ assert_valid_syntax('def true(...) end')
+ assert_valid_syntax('def false(...) end')
assert_syntax_error('iter do |...| end', /unexpected/)
assert_syntax_error('iter {|...|}', /unexpected/)
assert_syntax_error('->... {}', /unexpected/)