* compile.c (NODE_NEXT, NODE_REDO): add dummy putnil instruction to

fix stack consistency error.  [ruby-core:28172]

* bootstraptest/test_jump.rb: add a test for above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27424 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2010-04-20 15:28:33 +00:00
Родитель 7c7a7c1205
Коммит adfe4f3930
3 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,10 @@
Wed Apr 21 00:26:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
* compile.c (NODE_NEXT, NODE_REDO): add dummy putnil instruction to
fix stack consistency error. [ruby-core:28172]
* bootstraptest/test_jump.rb: add a test for above.
Wed Apr 21 00:16:44 2010 Yusuke Endoh <mame@tsg.ne.jp>
* ext/zlib/zlib.c (rb_deflate_params): update buf_filled count because

Просмотреть файл

@ -271,3 +271,14 @@ assert_normal_exit %q{
end
end.call
}
assert_normal_exit %q{
while true
begin
raise
next
rescue
end
break
end
}, '[ruby-core:28172]'

Просмотреть файл

@ -3359,6 +3359,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ADD_ADJUST(ret, nd_line(node), iseq->compile_data->redo_label);
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->start_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
ADD_INSN(ret, nd_line(node), putnil);
}
}
else if (iseq->compile_data->end_label) {
LABEL *splabel = NEW_LABEL(0);
@ -3424,6 +3427,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
add_ensure_iseq(ret, iseq, 0);
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->redo_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
ADD_INSN(ret, nd_line(node), putnil);
}
}
else if (iseq->type == ISEQ_TYPE_EVAL) {
redo_in_eval: