summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-29 14:13:15 +0900
committerGitHub <noreply@github.com>2022-06-29 14:13:15 +0900
commit685efac05983dee44ce2d96c24f2fcb96a0aebe2 (patch)
treec1129d340dd7c4c669a3ed22c9a7dcce5cbc9fee
parent5e1c18290089889c89465ff22cd777a5b6c80fe6 (diff)
[Bug #18884] `class` cannot be just followed by modifiers
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6064 Merged-By: nobu <nobu@ruby-lang.org>
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_parse.rb7
2 files changed, 8 insertions, 1 deletions
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")}}