aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-28 14:30:30 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-28 15:12:27 +0900
commitad96962173c824aeb4ecdd1d9a2e98eaa23a7536 (patch)
tree83bf4aff1f4cce5a4e55740133faa45d7690e814
parenta790f83bac86f160087f1b21c181a9fe60ecefe8 (diff)
downloadruby-ad96962173c824aeb4ecdd1d9a2e98eaa23a7536.tar.gz
Jumps are possible in the top-level loop
-rw-r--r--parse.y3
-rw-r--r--test/ruby/test_rubyoptions.rb3
2 files changed, 5 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index b24852c7b1..7570ba050f 100644
--- a/parse.y
+++ b/parse.y
@@ -2037,7 +2037,8 @@ static int looking_at_eol_p(struct parser_params *p);
program : {
SET_LEX_STATE(EXPR_BEG);
local_push(p, ifndef_ripper(1)+0);
- init_block_exit(p);
+ /* jumps are possible in the top-level loop. */
+ if (!ifndef_ripper(p->do_loop) + 0) init_block_exit(p);
}
top_compstmt
{
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index 572f26dcb7..a2f738d9a5 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -381,6 +381,9 @@ class TestRubyOptions < Test::Unit::TestCase
assert_in_out_err(%w(-cw -e !defined?(next)), "", ["Syntax OK"], [])
assert_in_out_err(%w(-cw -e !defined?(redo)), "", ["Syntax OK"], [])
assert_in_out_err(%w(-cw -e !defined?(retry)), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-n -cw -e break), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-n -cw -e next), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-n -cw -e redo), "", ["Syntax OK"], [])
end
def test_invalid_option