Change 29536 by [EMAIL PROTECTED] on 2006/12/12 21:00:37

        Assert that PVGVs are never SvVALID() in the PVBM sense.

Affected files ...

... //depot/perl/gv.h#69 edit
... //depot/perl/sv.h#298 edit

Differences ...

==== //depot/perl/gv.h#69 (text) ====
Index: perl/gv.h
--- perl/gv.h#68~28067~ 2006-05-02 11:03:57.000000000 -0700
+++ perl/gv.h   2006-12-12 13:00:37.000000000 -0800
@@ -46,6 +46,7 @@
        (*({ GV * const zzzz = (GV *) (gv);                             \
           assert(isGV_with_GP(zzzz));                                  \
           assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
+          assert(!SvVALID(zzzz));                                      \
           &(GvXPVGV(zzzz)->xiv_u.xivu_namehek);                        \
         }))
 #  define GvNAME_get(gv)       ({ assert(GvNAME_HEK(gv)); 
HEK_KEY(GvNAME_HEK(gv)); })

==== //depot/perl/sv.h#298 (text) ====
Index: perl/sv.h
--- perl/sv.h#297~29532~        2006-12-12 09:49:51.000000000 -0800
+++ perl/sv.h   2006-12-12 13:00:37.000000000 -0800
@@ -1056,6 +1056,20 @@
 #define SvEVALED_off(sv)       (SvFLAGS(sv) &= ~SVrepl_EVAL)
 
 #if defined (DEBUGGING) && defined(__GNUC__) && 
!defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define SvVALID(sv)          ({ SV *const thwacke = (SV *) (sv);     \
+                                  if (SvFLAGS(thwacke) & SVpbm_VALID)  \
+                                      assert(!isGV_with_GP(thwacke));  \
+                                  (SvFLAGS(thwacke) & SVpbm_VALID);    \
+                               })
+#  define SvVALID_on(sv)       ({ SV *const thwacke = (SV *) (sv);     \
+                                  assert(!isGV_with_GP(thwacke));      \
+                                  (SvFLAGS(thwacke) |= SVpbm_VALID);   \
+                               })
+#  define SvVALID_off(sv)      ({ SV *const thwacke = (SV *) (sv);     \
+                                  assert(!isGV_with_GP(thwacke));      \
+                                  (SvFLAGS(thwacke) &= ~SVpbm_VALID);  \
+                               })
+
 #  define SvTAIL(sv)   ({ SV *const _svi = (SV *) (sv);                \
                            assert(SvTYPE(_svi) != SVt_PVAV);           \
                            assert(SvTYPE(_svi) != SVt_PVHV);           \
@@ -1063,6 +1077,9 @@
                                == (SVpbm_TAIL|SVpbm_VALID);            \
                        })
 #else
+#  define SvVALID(sv)          (SvFLAGS(sv) & SVpbm_VALID)
+#  define SvVALID_on(sv)       (SvFLAGS(sv) |= SVpbm_VALID)
+#  define SvVALID_off(sv)      (SvFLAGS(sv) &= ~SVpbm_VALID)
 #  define SvTAIL(sv)       ((SvFLAGS(sv) & (SVpbm_TAIL|SVpbm_VALID))   \
                             == (SVpbm_TAIL|SVpbm_VALID))
 
@@ -1070,9 +1087,6 @@
 #define SvTAIL_on(sv)          (SvFLAGS(sv) |= SVpbm_TAIL)
 #define SvTAIL_off(sv)         (SvFLAGS(sv) &= ~SVpbm_TAIL)
 
-#define SvVALID(sv)            (SvFLAGS(sv) & SVpbm_VALID)
-#define SvVALID_on(sv)         (SvFLAGS(sv) |= SVpbm_VALID)
-#define SvVALID_off(sv)                (SvFLAGS(sv) &= ~SVpbm_VALID)
 
 #ifdef USE_ITHREADS
 /* The following uses the FAKE flag to show that a regex pointer is infact
End of Patch.

Reply via email to