added patch for -i'foo*bar', made code somewhat simpler, tweaked doc
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index b52563a..f7183a8 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1459,7 +1459,14 @@ PP(pp_iter)
        /* integer increment */
        if (cx->blk_loop.iterix > cx->blk_loop.itermax)
            RETPUSHNO;
-       sv_setiv(*cx->blk_loop.itervar, cx->blk_loop.iterix++);
+
+       /* we know that the loop index SV is IV capable, so we can save
+        * some time by doing the essential work of sv_setiv() ourself.
+        */
+       sv = *cx->blk_loop.itervar;
+       (void)SvIOK_only(sv);
+       SvIVX(sv) = cx->blk_loop.iterix++;
+
        RETPUSHYES;
     }