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.