diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-11-23 02:50:34 -0800 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-11-23 02:50:34 -0800 |
| commit | 32bacb21a2d51e9466b54bc5e30a832e68077c78 (patch) | |
| tree | 07bc3cd937192b3618e71bb7866b82e62f582314 | |
| parent | 276b77021fb099b1b767d5a606ef709fafd7421b (diff) | |
| parent | 6c8d2ca3995bbefa00ca04e5275b103f7e59dcd6 (diff) | |
| download | mruby-32bacb21a2d51e9466b54bc5e30a832e68077c78.tar.gz mruby-32bacb21a2d51e9466b54bc5e30a832e68077c78.zip | |
Merge pull request #570 from skandhas/pr-remove-redundant-LOOP_NORMAL-checkups
remove redundant LOOP_NORMAL checkups in function:codegen. and fix #561
| -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 |
