summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-24 18:54:52 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-24 18:54:52 +0000
commit848f840d47ead505de70a9de6287332f008d0047 (patch)
tree4fd02de14d300845364775e9472f9ffc2f8006f5
parentd08534a5fcbaee9007c083400de061de4a4fad32 (diff)
downloadruby-848f840d47ead505de70a9de6287332f008d0047.tar.gz
ruby-848f840d47ead505de70a9de6287332f008d0047.tar.xz
ruby-848f840d47ead505de70a9de6287332f008d0047.zip
* compile.c (iseq_compile_each): fix stack consistency bug.
a patch from Yusuke ENDOH <mame AT tsg.ne.jp> git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@14629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--bootstraptest/test_syntax.rb9
-rw-r--r--compile.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 52019c84b..9e1c2d0af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Dec 25 03:51:55 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix stack consistency bug.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
+
Tue Dec 25 03:19:47 2007 WATANABE Hirofumi <eban@ruby-lang.org>
* tool/make-snapshot: must create configure and lex.c.
diff --git a/bootstraptest/test_syntax.rb b/bootstraptest/test_syntax.rb
index 5fd948cdf..4be2f0cdd 100644
--- a/bootstraptest/test_syntax.rb
+++ b/bootstraptest/test_syntax.rb
@@ -681,3 +681,12 @@ assert_equal 'ok', %q{
end # direct
}, '[ruby-core:14385]'
+assert_equal 'ok', %q{
+ counter = 2
+ while true
+ counter -= 1
+ break if counter == 0
+ "#{next}"
+ end
+ :ok
+}
diff --git a/compile.c b/compile.c
index 9f79c056f..a3dea4179 100644
--- a/compile.c
+++ b/compile.c
@@ -2973,7 +2973,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
if (iseq->compile_data->redo_label != 0) {
/* next in while loop */
debugs("next in while\n");
- pop_after_throw = 1;
+ pop_after_throw = poped;
goto next_by_throw;
}
else if (iseq->compile_data->end_label) {