diff options
author | Nicholas Clark <nick@ccl4.org> | 2008-01-11 19:01:39 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2008-01-11 19:01:39 +0000 |
commit | 4450b6304425eed02bdbb4c8eaf1732145082409 (patch) | |
tree | 8f2686fe2253a383091cb658fec2c4a15c96fa33 /regexp.h | |
parent | 895aa832c42328fe103a78a829d7dcfa39731ca7 (diff) | |
download | perl-4450b6304425eed02bdbb4c8eaf1732145082409.tar.gz |
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.
p4raw-id: //depot/perl@32961
Diffstat (limited to 'regexp.h')
-rw-r--r-- | regexp.h | 45 |
1 files changed, 39 insertions, 6 deletions
@@ -378,14 +378,46 @@ and check for NULL. #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 @@ and check for NULL. ({ \ /* 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) \ |