From 685efac05983dee44ce2d96c24f2fcb96a0aebe2 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 29 Jun 2022 14:13:15 +0900 Subject: [PATCH] [Bug #18884] `class` cannot be just followed by modifiers --- parse.y | 2 +- test/ruby/test_parse.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/parse.y b/parse.y index 4bda597834..f746a0c272 100644 --- a/parse.y +++ b/parse.y @@ -9235,7 +9235,7 @@ parse_ident(struct parser_params *p, int c, int cmd_state) return keyword_do_block; return keyword_do; } - if (IS_lex_state_for(state, (EXPR_BEG | EXPR_LABELED))) + if (IS_lex_state_for(state, (EXPR_BEG | EXPR_LABELED | EXPR_CLASS))) return kw->id[0]; else { if (kw->id[0] != kw->id[1]) diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 2841e20f6d..1d756441f8 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1359,6 +1359,13 @@ x = __ENCODING__ end; end + def test_if_after_class + assert_valid_syntax('module if true; Object end::Kernel; end') + assert_valid_syntax('module while true; break Object end::Kernel; end') + assert_valid_syntax('class if true; Object end::Kernel; end') + assert_valid_syntax('class while true; break Object end::Kernel; end') + end + =begin def test_past_scope_variable assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}