* 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:
parent
7c7a7c1205
commit
adfe4f3930
@ -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>
|
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
|
* ext/zlib/zlib.c (rb_deflate_params): update buf_filled count because
|
||||||
|
@ -271,3 +271,14 @@ assert_normal_exit %q{
|
|||||||
end
|
end
|
||||||
end.call
|
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_ADJUST(ret, nd_line(node), iseq->compile_data->redo_label);
|
||||||
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->start_label);
|
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->start_label);
|
||||||
ADD_ADJUST_RESTORE(ret, splabel);
|
ADD_ADJUST_RESTORE(ret, splabel);
|
||||||
|
if (!poped) {
|
||||||
|
ADD_INSN(ret, nd_line(node), putnil);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (iseq->compile_data->end_label) {
|
else if (iseq->compile_data->end_label) {
|
||||||
LABEL *splabel = NEW_LABEL(0);
|
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_ensure_iseq(ret, iseq, 0);
|
||||||
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->redo_label);
|
ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->redo_label);
|
||||||
ADD_ADJUST_RESTORE(ret, splabel);
|
ADD_ADJUST_RESTORE(ret, splabel);
|
||||||
|
if (!poped) {
|
||||||
|
ADD_INSN(ret, nd_line(node), putnil);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (iseq->type == ISEQ_TYPE_EVAL) {
|
else if (iseq->type == ISEQ_TYPE_EVAL) {
|
||||||
redo_in_eval:
|
redo_in_eval:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user