summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/codegen.c2
-rw-r--r--test/t/bs_block.rb30
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