In struct block_subst, access the member once via a macro CxONCE()
Nicholas Clark [Mon, 21 Jan 2008 17:21:40 +0000 (17:21 +0000)]
which will allow the storage location to be changed.

p4raw-id: //depot/perl@33034

cop.h
pp_ctl.c
scope.c

diff --git a/cop.h b/cop.h
index ccf910b..7c4c721 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -650,6 +650,8 @@ struct subst {
        rxres_save(&cx->sb_rxres, rx);                                  \
        (void)ReREFCNT_inc(rx)
 
+#define CxONCE(cx)             (0 + cx->sb_once)
+
 #define POPSUBST(cx) cx = &cxstack[cxstack_ix--];                      \
        rxres_free(&cx->sb_rxres);                                      \
        ReREFCNT_dec(cx->sb_rx)
index e821972..50a9df6 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -234,7 +234,7 @@ PP(pp_substcont)
        FREETMPS; /* Prevent excess tmp stack */
 
        /* Are we done */
-       if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
+       if (CxONCE(cx) || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
                                     s == m, cx->sb_targ, NULL,
                                     ((cx->sb_rflags & REXEC_COPY_STR)
                                      ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
diff --git a/scope.c b/scope.c
index 4ee0f10..9cbd13c 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -1112,7 +1112,7 @@ Perl_cx_dump(pTHX_ PERL_CONTEXT *cx)
        PerlIO_printf(Perl_debug_log, "SB_RFLAGS = %ld\n",
                (long)cx->sb_rflags);
        PerlIO_printf(Perl_debug_log, "SB_ONCE = %ld\n",
-               (long)cx->sb_once);
+               (long)CxONCE(cx));
        PerlIO_printf(Perl_debug_log, "SB_ORIG = %s\n",
                cx->sb_orig);
        PerlIO_printf(Perl_debug_log, "SB_DSTR = 0x%"UVxf"\n",