Change 18552 by jhi@kosh on 2003/01/22 12:34:06

        Subject: [PATCH] assert PV isn't RV
        From: Nicholas Clark <[EMAIL PROTECTED]>
        Date: Fri, 17 Jan 2003 19:40:45 +0000
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

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

Differences ...

==== //depot/perl/sv.h#132 (text) ====
Index: perl/sv.h
--- perl/sv.h#131~18496~        Thu Jan 16 12:36:23 2003
+++ perl/sv.h   Wed Jan 22 04:34:06 2003
@@ -514,11 +514,19 @@
 #define SvNIOK_off(sv)         (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \
                                                  SVp_IOK|SVp_NOK|SVf_IVisUV))
 
+#ifdef __GNUC__
+#define assert_not_ROK(sv)     ({assert(!SvROK(sv) || !SvRV(sv))})
+#else
+#define assert_not_ROK(sv)     0
+#endif
+
 #define SvOK(sv)               (SvFLAGS(sv) & SVf_OK)
-#define SvOK_off(sv)           (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
+#define SvOK_off(sv)           (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
                                                  SVf_IVisUV|SVf_UTF8), \
                                                        SvOOK_off(sv))
-#define SvOK_off_exc_UV(sv)    (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
+#define SvOK_off_exc_UV(sv)    (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
                                                  SVf_UTF8),            \
                                                        SvOOK_off(sv))
 
@@ -529,7 +537,8 @@
 #define SvNOKp(sv)             (SvFLAGS(sv) & SVp_NOK)
 #define SvNOKp_on(sv)          (SvFLAGS(sv) |= SVp_NOK)
 #define SvPOKp(sv)             (SvFLAGS(sv) & SVp_POK)
-#define SvPOKp_on(sv)          (SvFLAGS(sv) |= SVp_POK)
+#define SvPOKp_on(sv)          (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) |= SVp_POK)
 
 #define SvIOK(sv)              (SvFLAGS(sv) & SVf_IOK)
 #define SvIOK_on(sv)           (SvRELEASE_IVX(sv), \
@@ -579,12 +588,15 @@
 #define SvUTF8_off(sv)         (SvFLAGS(sv) &= ~(SVf_UTF8))
 
 #define SvPOK(sv)              (SvFLAGS(sv) & SVf_POK)
-#define SvPOK_on(sv)           (SvFLAGS(sv) |= (SVf_POK|SVp_POK))
+#define SvPOK_on(sv)           (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) |= (SVf_POK|SVp_POK))
 #define SvPOK_off(sv)          (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))
-#define SvPOK_only(sv)         (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
+#define SvPOK_only(sv)         (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
                                                  SVf_IVisUV|SVf_UTF8), \
                                    SvFLAGS(sv) |= (SVf_POK|SVp_POK))
-#define SvPOK_only_UTF8(sv)    (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
+#define SvPOK_only_UTF8(sv)    (assert_not_ROK(sv),                    \
+                                SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC|    \
                                                  SVf_IVisUV),          \
                                    SvFLAGS(sv) |= (SVf_POK|SVp_POK))
 
End of Patch.

Reply via email to