From 558c10413990cb08b7750895b572b0b59eed0d28 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Wed, 22 Apr 2026 21:29:13 +0200 Subject: [ruby/prism] Reject `END { break }` for Ruby 4.0 For [Bug #20409] https://github.com/ruby/prism/commit/4848eb344e --- test/prism/errors/4.1/end_block_exit.txt | 5 +++++ test/prism/errors_test.rb | 9 ++++++++- test/prism/fixtures/3.3-4.0/end_block_exit.txt | 7 +++++++ test/prism/fixtures/end_block_exit.txt | 3 +++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/prism/errors/4.1/end_block_exit.txt create mode 100644 test/prism/fixtures/3.3-4.0/end_block_exit.txt create mode 100644 test/prism/fixtures/end_block_exit.txt (limited to 'test') diff --git a/test/prism/errors/4.1/end_block_exit.txt b/test/prism/errors/4.1/end_block_exit.txt new file mode 100644 index 0000000000..f8fc59d1a3 --- /dev/null +++ b/test/prism/errors/4.1/end_block_exit.txt @@ -0,0 +1,5 @@ +END { + break + ^~~~~ Invalid break +} + diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 9a54203f74..9dd7fbe3fe 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -9,6 +9,11 @@ module Prism base = File.expand_path("errors", __dir__) filepaths = Dir[ENV.fetch("FOCUS", "**/*.txt"), base: base] + PARSE_Y_EXCLUDES = [ + # https://bugs.ruby-lang.org/issues/20409 + "#{base}/4.1/end_block_exit.txt" + ] + filepaths.each do |filepath| ruby_versions_for(filepath).each do |version| define_method(:"test_#{version}_#{File.basename(filepath, ".txt")}") do @@ -111,7 +116,9 @@ module Prism expected = File.read(filepath, binmode: true, external_encoding: Encoding::UTF_8) source = expected.lines.grep_v(/^\s*\^/).join.gsub(/\n*\z/, "") - refute_valid_syntax(source) if CURRENT_MAJOR_MINOR == version + if CURRENT_MAJOR_MINOR == version && !PARSE_Y_EXCLUDES.include?(filepath) + refute_valid_syntax(source) + end result = Prism.parse(source, version: version) errors = result.errors diff --git a/test/prism/fixtures/3.3-4.0/end_block_exit.txt b/test/prism/fixtures/3.3-4.0/end_block_exit.txt new file mode 100644 index 0000000000..53afa1e2f4 --- /dev/null +++ b/test/prism/fixtures/3.3-4.0/end_block_exit.txt @@ -0,0 +1,7 @@ +END { + return +} + +END { + break +} diff --git a/test/prism/fixtures/end_block_exit.txt b/test/prism/fixtures/end_block_exit.txt new file mode 100644 index 0000000000..1f64dcb6ed --- /dev/null +++ b/test/prism/fixtures/end_block_exit.txt @@ -0,0 +1,3 @@ +END { + next +} -- cgit v1.2.3