diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-24 17:41:29 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-24 17:41:29 +0000 |
commit | 105e00bdd797fa6699919e3d34edf57428be3c6e (patch) | |
tree | f855ebba882f306972fc857b06ca12da09df3722 | |
parent | fda0ef6f04fb7cb164bb4409734a1506fd257d78 (diff) |
* compile.c (iseq_compile_each): add a "pop" insn after break
to fix stack consistency error. [ruby-core:14385]
* bootstraptest/test_syntax.rb: add tests for above.
* bootstraptest/test_knownbug.rb: remove fixed bug.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | bootstraptest/test_knownbug.rb | 9 | ||||
-rw-r--r-- | bootstraptest/test_syntax.rb | 19 | ||||
-rw-r--r-- | compile.c | 1 |
4 files changed, 29 insertions, 9 deletions
@@ -1,3 +1,12 @@ +Tue Dec 25 02:15:39 2007 Koichi Sasada <[email protected]> + + * compile.c (iseq_compile_each): add a "pop" insn after break + to fix stack consistency error. [ruby-core:14385] + + * bootstraptest/test_syntax.rb: add tests for above. + + * bootstraptest/test_knownbug.rb: remove fixed bug. + Tue Dec 25 01:54:36 2007 Yukihiro Matsumoto <[email protected]> * id.c (Init_id): remove several unused symbols. [ruby-core:14362] diff --git a/bootstraptest/test_knownbug.rb b/bootstraptest/test_knownbug.rb index eebd299340..39dc6a9b8b 100644 --- a/bootstraptest/test_knownbug.rb +++ b/bootstraptest/test_knownbug.rb @@ -2,12 +2,3 @@ # This test file concludes tests which point out known bugs. # So all tests will cause failure. # - -assert_normal_exit %q{ - counter = 2 - while true - counter -= 1 - next if counter != 0 - break - end -}, '[ruby-core:14385]' diff --git a/bootstraptest/test_syntax.rb b/bootstraptest/test_syntax.rb index e06db6bf4a..5fd948cdff 100644 --- a/bootstraptest/test_syntax.rb +++ b/bootstraptest/test_syntax.rb @@ -662,3 +662,22 @@ assert_equal '1', %q{ foo } +assert_equal 'ok', %q{ + counter = 2 + while true + counter -= 1 + next if counter != 0 + break + end + :ok +}, '[ruby-core:14385]' + +assert_equal 'ok', %q{ + counter = 2 + while true + counter -= 1 + next if counter != 0 + break :ok + end # direct +}, '[ruby-core:14385]' + @@ -2928,6 +2928,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) iseq->compile_data->loopval_popped); ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->end_label); + ADD_INSN(ret, nd_line(node), pop); } else if (iseq->type == ISEQ_TYPE_BLOCK) { break_by_insn: |