From: Nicholas Clark Date: Fri, 8 Dec 2006 22:11:56 +0000 (+0000) Subject: Assert that BmRARE, BmUSEFUL and BmPREVIOUS are only called on SVtPVBM X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=60c8298a73edc9f7e89dcf60682f3477045fa898;p=p5sagit%2Fp5-mst-13.2.git Assert that BmRARE, BmUSEFUL and BmPREVIOUS are only called on SVtPVBM p4raw-id: //depot/perl@29487 --- diff --git a/sv.h b/sv.h index 57911d3..4d3e488 100644 --- a/sv.h +++ b/sv.h @@ -1300,9 +1300,27 @@ the scalar's value cannot change unless written to. } \ } STMT_END -#define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare -#define BmUSEFUL(sv) ((XPVBM*) SvANY(sv))->xbm_useful -#define BmPREVIOUS(sv) ((XPVBM*) SvANY(sv))->xbm_previous +#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# define BmRARE(sv) \ + (*({ SV *const _svi = (SV *) (sv); \ + assert(SvTYPE(_svi) == SVt_PVBM); \ + &(((XPVBM*) SvANY(_svi))->xbm_rare); \ + })) +# define BmUSEFUL(sv) \ + (*({ SV *const _svi = (SV *) (sv); \ + assert(SvTYPE(_svi) == SVt_PVBM); \ + &(((XPVBM*) SvANY(_svi))->xbm_useful); \ + })) +# define BmPREVIOUS(sv) \ + (*({ SV *const _svi = (SV *) (sv); \ + assert(SvTYPE(_svi) == SVt_PVBM); \ + &(((XPVBM*) SvANY(_svi))->xbm_previous); \ + })) +#else +# define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare +# define BmUSEFUL(sv) ((XPVBM*) SvANY(sv))->xbm_useful +# define BmPREVIOUS(sv) ((XPVBM*) SvANY(sv))->xbm_previous +#endif #define FmLINES(sv) ((XPVFM*) SvANY(sv))->xfm_lines