In taking out a bug spotted by my regression tests in t/cmd/for.t
I actually managed to disable the entire optimisation. Which means
that I didn't find the other bug. This optimisation is live, and
passes all tests.
p4raw-id: //depot/perl@23109
if (!theirmark || theirmark->op_type != OP_PUSHMARK)
break;
- ourmark = ((LISTOP *)o)->op_first;
- if (!ourmark || ourmark->op_type != OP_PUSHMARK)
- break;
-
- if (ourmark->op_next != o) {
+ if (theirmark->op_sibling != o) {
/* There's something between the mark and the reverse, eg
for (1, reverse (...))
so no go. */
break;
}
+ ourmark = ((LISTOP *)o)->op_first;
+ if (!ourmark || ourmark->op_type != OP_PUSHMARK)
+ break;
+
ourlast = ((LISTOP *)o)->op_last;
if (!ourlast || ourlast->op_next != o)
break;
/* iterate array */
if (PL_op->op_private & OPpITER_REVERSED) {
/* In reverse, use itermax as the min :-) */
- if (cx->blk_loop.iterix <= 0)
+ if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
RETPUSHNO;
if (SvMAGICAL(av) || AvREIFY(av)) {