X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regexp.h;h=07fe0b72dd8a10aab88a3bc062da989c454b146d;hb=b3c649451aa23903a1f1aa5b0d54e8244611b239;hp=74973aeb5fae1157475c93a4f2bf620a4b7736c0;hpb=0a0b43fa5b4c00dcd9c6c26dea968d2368fc6eae;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regexp.h b/regexp.h index 74973ae..07fe0b7 100644 --- a/regexp.h +++ b/regexp.h @@ -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) \ + (*({ \ + const REGEXP *const thwape = (prog); \ + assert(SvTYPE(thwape) == SVt_REGEXP); \ + &RXp_EXTFLAGS(SvANY(thwape)); \ + })) +# define RX_ENGINE(prog) \ + (*({ \ + const REGEXP *const thwape = (prog); \ + assert(SvTYPE(thwape) == SVt_REGEXP); \ + &SvANY(thwape)->engine; \ + })) +# define RX_SUBBEG(prog) \ + (*({ \ + const REGEXP *const thwape = (prog); \ + assert(SvTYPE(thwape) == SVt_REGEXP); \ + &SvANY(thwape)->subbeg; \ + })) +# define RX_OFFS(prog) \ + (*({ \ + const REGEXP *const thwape = (prog); \ + assert(SvTYPE(thwape) == SVt_REGEXP); \ + &SvANY(thwape)->offs; \ + })) +# define RX_NPARENS(prog) \ + (*({ \ + const 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,7 +469,9 @@ and check for NULL. ({ \ /* This is here to generate a casting warning if incorrect. */ \ REGEXP *const zwapp = (re); \ - (REGEXP *) SvREFCNT_inc(zwapp); \ + assert(SvTYPE(zwapp) == SVt_REGEXP); \ + SvREFCNT_inc(zwapp); \ + zwapp; \ }) # define ReREFCNT_dec(re) \ ({ \