This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Encode from version 2.79 to 2.80
[perl5.git] / cop.h
diff --git a/cop.h b/cop.h
index aae9cea..b15ddf4 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -34,6 +34,7 @@ struct jmpenv {
     Sigjmp_buf         je_buf;         /* uninit if je_prev is NULL */
     int                        je_ret;         /* last exception thrown */
     bool               je_mustcatch;   /* need to call longjmp()? */
+    U16                 je_old_delaymagic; /* saved PL_delaymagic */
 };
 
 typedef struct jmpenv JMPENV;
@@ -55,6 +56,7 @@ typedef struct jmpenv JMPENV;
        PL_start_env.je_prev = NULL;            \
        PL_start_env.je_ret = -1;               \
        PL_start_env.je_mustcatch = TRUE;       \
+       PL_start_env.je_old_delaymagic = 0;     \
     } STMT_END
 
 /*
@@ -103,6 +105,7 @@ typedef struct jmpenv JMPENV;
        cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK);              \
        PL_top_env = &cur_env;                                          \
        cur_env.je_mustcatch = FALSE;                                   \
+       cur_env.je_old_delaymagic = PL_delaymagic;                      \
        (v) = cur_env.je_ret;                                           \
     } STMT_END
 
@@ -114,6 +117,7 @@ typedef struct jmpenv JMPENV;
            Perl_deb(aTHX_ "JUMPENV_POP level=%d at %s:%d\n",           \
                         i, __FILE__, __LINE__);})                      \
        assert(PL_top_env == &cur_env);                                 \
+       PL_delaymagic = cur_env.je_old_delaymagic;                      \
        PL_top_env = cur_env.je_prev;                                   \
     } STMT_END
 
@@ -935,11 +939,13 @@ struct subst {
        cx->sb_rx               = rx,                                   \
        cx->cx_type             = CXt_SUBST | (once ? CXp_ONCE : 0);    \
        rxres_save(&cx->sb_rxres, rx);                                  \
-       (void)ReREFCNT_inc(rx)
+       (void)ReREFCNT_inc(rx);                                         \
+        SvREFCNT_inc_void_NN(targ)
 
 #  define POPSUBST(cx) cx = &cxstack[cxstack_ix--];                    \
        rxres_free(&cx->sb_rxres);                                      \
-       ReREFCNT_dec(cx->sb_rx)
+       ReREFCNT_dec(cx->sb_rx);                                        \
+        SvREFCNT_dec_NN(cx->sb_targ)
 #endif
 
 #define CxONCE(cx)             ((cx)->cx_type & CXp_ONCE)