/* 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)) {
PL_curpm = newpm; /* ... and pop $1 et al */
LEAVESUB(sv);
- return pop_return();
+ return cx->blk_sub.retop;
}
/* This duplicates the above code because the above code must not
PL_curpm = newpm; /* ... and pop $1 et al */
LEAVESUB(sv);
- return pop_return();
+ return cx->blk_sub.retop;
}
dMARK;
register I32 items = SP - MARK;
AV* padlist = CvPADLIST(cv);
- push_return(PL_op->op_next);
PUSHBLOCK(cx, CXt_SUB, MARK);
PUSHSUB(cx);
+ cx->blk_sub.retop = PL_op->op_next;
CvDEPTH(cv)++;
/* XXX This would be a natural place to set C<PL_compcv = cv> so
* that eval'' ops within this sub know the correct lexical space.