Update to use $^O
[p5sagit/p5-mst-13.2.git] / scope.c
diff --git a/scope.c b/scope.c
index 12f3595..3f48609 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -30,7 +30,7 @@ I32
 cxinc()
 {
     cxstack_max = cxstack_max * 3 / 2;
-    Renew(cxstack, cxstack_max, CONTEXT);
+    Renew(cxstack, cxstack_max + 1, CONTEXT);  /* XXX should fix CXINC macro */
     return cxstack_ix + 1;
 }
 
@@ -152,7 +152,7 @@ GV *gv;
     GP *ogp = GvGP(gv);
 
     SSCHECK(3);
-    SSPUSHPTR(gv);
+    SSPUSHPTR(SvREFCNT_inc(gv));
     SSPUSHPTR(ogp);
     SSPUSHINT(SAVEt_GP);
 
@@ -525,6 +525,7 @@ I32 base;
            gv = (GV*)SSPOPPTR;
             gp_free(gv);
             GvGP(gv) = (GP*)ptr;
+           SvREFCNT_dec(gv);
             break;
        case SAVEt_FREESV:
            ptr = SSPOPPTR;
@@ -595,7 +596,10 @@ I32 base;
            (*SSPOPDPTR)(ptr);
            break;
        case SAVEt_REGCONTEXT:
-           savestack_ix -= SSPOPINT;   /* regexp must have croaked */
+           {
+               I32 delta = SSPOPINT;
+               savestack_ix -= delta;  /* regexp must have croaked */
+           }
            break;
        default:
            croak("panic: leave_scope inconsistency");
@@ -637,8 +641,9 @@ CONTEXT* cx;
     case CXt_EVAL:
        fprintf(stderr, "BLK_EVAL.OLD_IN_EVAL = %ld\n",
                (long)cx->blk_eval.old_in_eval);
-       fprintf(stderr, "BLK_EVAL.OLD_OP_TYPE = %s\n",
-               op_name[cx->blk_eval.old_op_type]);
+       fprintf(stderr, "BLK_EVAL.OLD_OP_TYPE = %s (%s)\n",
+               op_name[cx->blk_eval.old_op_type],
+               op_desc[cx->blk_eval.old_op_type]);
        fprintf(stderr, "BLK_EVAL.OLD_NAME = %s\n",
                cx->blk_eval.old_name);
        fprintf(stderr, "BLK_EVAL.OLD_EVAL_ROOT = 0x%lx\n",