diff options
| -rw-r--r-- | src/codegen.c | 2 | ||||
| -rw-r--r-- | test/t/bs_block.rb | 30 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/codegen.c b/src/codegen.c index f37a9e331..fd41e3cb8 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1501,7 +1501,7 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_RETURN: codegen(s, tree, VAL); pop(); - if (s->loop && s->loop->type != LOOP_NORMAL) { + if (s->loop) { genop(s, MKOP_AB(OP_RETURN, cursp(), OP_R_RETURN)); } else { diff --git a/test/t/bs_block.rb b/test/t/bs_block.rb index cbfb925fe..4bfdc304a 100644 --- a/test/t/bs_block.rb +++ b/test/t/bs_block.rb @@ -389,7 +389,7 @@ assert('BS Block [ruby-core:14395]') do t.test_for_bug end -assert("BS Block 32") do +assert("BS Block 33") do module TestReturnFromNestedBlock def self.test 1.times do @@ -402,3 +402,31 @@ assert("BS Block 32") do end TestReturnFromNestedBlock.test == :ok end + +assert("BS Block 34") do + module TestReturnFromNestedBlock_BSBlock34 + def self.test + 1.times do + while true + return :ok + end + end + :bad + end + end + TestReturnFromNestedBlock_BSBlock34.test == :ok +end + +assert("BS Block 35") do + module TestReturnFromNestedBlock_BSBlock35 + def self.test + 1.times do + until false + return :ok + end + end + :bad + end + end + TestReturnFromNestedBlock_BSBlock35.test == :ok +end |
