Add missing syms to global.sym; update magic doc
[p5sagit/p5-mst-13.2.git] / cop.h
diff --git a/cop.h b/cop.h
index c062dc6..543c039 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -105,13 +105,16 @@ struct block_loop {
        cx->blk_loop.next_op = cLOOP->op_nextop;                        \
        cx->blk_loop.last_op = cLOOP->op_lastop;                        \
        cx->blk_loop.iterlval = Nullsv;                                 \
-       cx->blk_loop.itervar = ivar;                                    \
-       if (ivar)                                                       \
-           cx->blk_loop.itersave = *cx->blk_loop.itervar;
+       if (cx->blk_loop.itervar = (ivar))                              \
+           cx->blk_loop.itersave = SvREFCNT_inc(*cx->blk_loop.itervar);
 
 #define POPLOOP(cx)                                                    \
        newsp           = stack_base + cx->blk_loop.resetsp;            \
-       SvREFCNT_dec(cx->blk_loop.iterlval)
+       SvREFCNT_dec(cx->blk_loop.iterlval);                            \
+       if (cx->blk_loop.itervar) {                                     \
+           SvREFCNT_dec(*cx->blk_loop.itervar);                        \
+           *cx->blk_loop.itervar = cx->blk_loop.itersave;              \
+       }
 
 /* context common to subroutines, evals and loops */
 struct block {