Change 32961 by [EMAIL PROTECTED] on 2008/01/11 19:01:39

        assert that these are the regexps you were looking for.
        (at least for the most commonly used macros).
        Remove the duplicate definition of RX_SUBBEG(), which I was sure I'd
        done earlier.

Affected files ...

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

Differences ...

==== //depot/perl/regexp.h#132 (text) ====
Index: perl/regexp.h
--- perl/regexp.h#131~32925~    2008-01-09 09:59:11.000000000 -0800
+++ perl/regexp.h       2008-01-11 11:01:39.000000000 -0800
@@ -378,14 +378,46 @@
 #define RX_WRAPPED(prog)       SvPVX(prog)
 #define RX_WRAPLEN(prog)       SvCUR(prog)
 #define RX_CHECK_SUBSTR(prog)  (((struct regexp *)SvANY(prog))->check_substr)
-#define RX_EXTFLAGS(prog)      RXp_EXTFLAGS((struct regexp *)SvANY(prog))
 #define RX_REFCNT(prog)                SvREFCNT(prog)
-#define RX_ENGINE(prog)                (((struct regexp *)SvANY(prog))->engine)
-#define RX_SUBBEG(prog)                (((struct regexp *)SvANY(prog))->subbeg)
-#define RX_OFFS(prog)          (((struct regexp *)SvANY(prog))->offs)
-#define RX_NPARENS(prog)       (((struct regexp *)SvANY(prog))->nparens)
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && 
!defined(PERL_GCC_PEDANTIC)
+#  define RX_EXTFLAGS(prog)                                            \
+    (*({                                                               \
+       REGEXP *const thwape = (prog);                                  \
+       assert(SvTYPE(thwape) == SVt_REGEXP);                           \
+       &RXp_EXTFLAGS(SvANY(thwape));                                   \
+    }))
+#  define RX_ENGINE(prog)                                              \
+    (*({                                                               \
+       REGEXP *const thwape = (prog);                                  \
+       assert(SvTYPE(thwape) == SVt_REGEXP);                           \
+       &SvANY(thwape)->engine;                                         \
+    }))
+#  define RX_SUBBEG(prog)                                              \
+    (*({                                                               \
+       REGEXP *const thwape = (prog);                                  \
+       assert(SvTYPE(thwape) == SVt_REGEXP);                           \
+       &SvANY(thwape)->subbeg;                                         \
+    }))
+#  define RX_SUBBEG(prog)                                              \
+    (*({                                                               \
+       REGEXP *const thwape = (prog);                                  \
+       assert(SvTYPE(thwape) == SVt_REGEXP);                           \
+       &SvANY(thwape)->subbeg;                                         \
+    }))
+#  define RX_NPARENS(prog)                                             \
+    (*({                                                               \
+       REGEXP *const thwape = (prog);                                  \
+       assert(SvTYPE(thwape) == SVt_REGEXP);                           \
+       &SvANY(thwape)->nparens;                                        \
+    }))
+#else
+#  define RX_EXTFLAGS(prog)    RXp_EXTFLAGS((struct regexp *)SvANY(prog))
+#  define RX_ENGINE(prog)      (((struct regexp *)SvANY(prog))->engine)
+#  define RX_SUBBEG(prog)      (((struct regexp *)SvANY(prog))->subbeg)
+#  define RX_OFFS(prog)                (((struct regexp *)SvANY(prog))->offs)
+#  define RX_NPARENS(prog)     (((struct regexp *)SvANY(prog))->nparens)
+#endif
 #define RX_SUBLEN(prog)                (((struct regexp *)SvANY(prog))->sublen)
-#define RX_SUBBEG(prog)                (((struct regexp *)SvANY(prog))->subbeg)
 #define RX_MINLEN(prog)                (((struct regexp *)SvANY(prog))->minlen)
 #define RX_MINLENRET(prog)     (((struct regexp *)SvANY(prog))->minlenret)
 #define RX_GOFS(prog)          (((struct regexp *)SvANY(prog))->gofs)
@@ -437,6 +469,7 @@
     ({                                                                 \
        /* This is here to generate a casting warning if incorrect.  */ \
        REGEXP *const zwapp = (re);                                     \
+       assert(SvTYPE(zwapp) == SVt_REGEXP);                            \
        (REGEXP *) SvREFCNT_inc(zwapp);                                 \
     })
 #  define ReREFCNT_dec(re)                                             \
End of Patch.

Reply via email to