Change 29537 by [EMAIL PROTECTED] on 2006/12/12 21:31:10

        Assert that SvPAD_TYPED_on(), SvPAD_OUR_on() and SvPAD_STATE_on()
        are never called on PVGVs.

Affected files ...

... //depot/perl/sv.h#299 edit

Differences ...

==== //depot/perl/sv.h#299 (text) ====
Index: perl/sv.h
--- perl/sv.h#298~29536~        2006-12-12 13:00:37.000000000 -0800
+++ perl/sv.h   2006-12-12 13:31:10.000000000 -0800
@@ -341,7 +341,7 @@
 /* PVHV */
 #define SVphv_SHAREKEYS 0x20000000     /* PVHV
                                           keys live on shared string table */
-/* PVNV, PVMG, PVGV, presumably only inside pads */
+/* PVNV, PVMG, presumably only inside pads */
 #define SVpad_NAME     0x40000000      /* This SV is a name in the PAD, so
                                           SVpad_TYPED, SVpad_OUR and
                                           SVpad_STATE apply */
@@ -1098,15 +1098,34 @@
 
 #define SvPAD_TYPED(sv) \
        ((SvFLAGS(sv) & (SVpad_NAME|SVpad_TYPED)) == (SVpad_NAME|SVpad_TYPED))
-#define SvPAD_TYPED_on(sv)     (SvFLAGS(sv) |= SVpad_NAME|SVpad_TYPED)
 
 #define SvPAD_OUR(sv)  \
        ((SvFLAGS(sv) & (SVpad_NAME|SVpad_OUR)) == (SVpad_NAME|SVpad_OUR))
-#define SvPAD_OUR_on(sv)       (SvFLAGS(sv) |= SVpad_NAME|SVpad_OUR)
 
 #define SvPAD_STATE(sv)        \
        ((SvFLAGS(sv) & (SVpad_NAME|SVpad_STATE)) == (SVpad_NAME|SVpad_STATE))
-#define SvPAD_STATE_on(sv)     (SvFLAGS(sv) |= SVpad_NAME|SVpad_STATE)
+
+#if defined (DEBUGGING) && defined(__GNUC__) && 
!defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define SvPAD_TYPED_on(sv)   ({                                      \
+           SV *const whap = (SV *) (sv);                               \
+           assert(SvTYPE(whap) == SVt_PVMG);                           \
+           (SvFLAGS(whap) |= SVpad_NAME|SVpad_TYPED);                  \
+       })
+#define SvPAD_OUR_on(sv)       ({                                      \
+           SV *const whap = (SV *) (sv);                               \
+           assert(SvTYPE(whap) == SVt_PVMG);                           \
+           (SvFLAGS(whap) |= SVpad_NAME|SVpad_OUR);                    \
+       })
+#define SvPAD_STATE_on(sv)     ({                                      \
+           SV *const whap = (SV *) (sv);                               \
+           assert(SvTYPE(whap) == SVt_PVNV || SvTYPE(whap) == SVt_PVMG); \
+           (SvFLAGS(whap) |= SVpad_NAME|SVpad_STATE);                  \
+       })
+#else
+#  define SvPAD_TYPED_on(sv)   (SvFLAGS(sv) |= SVpad_NAME|SVpad_TYPED)
+#  define SvPAD_OUR_on(sv)     (SvFLAGS(sv) |= SVpad_NAME|SVpad_OUR)
+#  define SvPAD_STATE_on(sv)   (SvFLAGS(sv) |= SVpad_NAME|SVpad_STATE)
+#endif
 
 #define OURSTASH(sv)   \
        (SvPAD_OUR(sv) ? ((XPVMG*) SvANY(sv))->xmg_u.xmg_ourstash : NULL)
End of Patch.

Reply via email to