From: David Mitchell Date: Tue, 13 Nov 2012 11:55:19 +0000 (+0000) Subject: pp_iter: factor out some common code in CXt_LOOP_FOR X-Git-Tag: upstream/5.20.0~4812^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8a20bb606d6f1faffb9dd19f02579f3ce642620;p=platform%2Fupstream%2Fperl.git pp_iter: factor out some common code in CXt_LOOP_FOR --- diff --git a/pp_hot.c b/pp_hot.c index e02558c..38a5d4f 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -1971,36 +1971,29 @@ PP(pp_iter) AV *av = cx->blk_loop.state_u.ary.ary; SV *sv; bool av_is_stack = FALSE; + IV ix; if (!av) { av_is_stack = TRUE; av = PL_curstack; } if (PL_op->op_private & OPpITER_REVERSED) { - if (cx->blk_loop.state_u.ary.ix <= (av_is_stack - ? cx->blk_loop.resetsp + 1 : 0)) + ix = --cx->blk_loop.state_u.ary.ix; + if (ix <= (av_is_stack ? cx->blk_loop.resetsp : -1)) RETPUSHNO; - - if (SvMAGICAL(av) || AvREIFY(av)) { - SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE); - sv = svp ? *svp : NULL; - } - else { - sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix]; - } } else { - if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp : - AvFILL(av))) + ix = ++cx->blk_loop.state_u.ary.ix; + if (ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av))) RETPUSHNO; + } - if (SvMAGICAL(av) || AvREIFY(av)) { - SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE); - sv = svp ? *svp : NULL; - } - else { - sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix]; - } + if (SvMAGICAL(av) || AvREIFY(av)) { + SV * const * const svp = av_fetch(av, ix, FALSE); + sv = svp ? *svp : NULL; + } + else { + sv = AvARRAY(av)[ix]; } if (sv && SvIS_FREED(sv)) {