diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-12-11 22:18:53 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-12-11 22:18:53 +0000 |
commit | 373b357f184d67d2c589b8aca81c803276397db5 (patch) | |
tree | fae55c01d901014d715a4b72edadc684e1a32e62 /sv.h | |
parent | fe9016888567104767dbf71c5a5b5c31341af1f4 (diff) | |
download | perl-373b357f184d67d2c589b8aca81c803276397db5.tar.gz |
Move PERL_FBM_TABLE_OFFSET and PERL_FBM_FLAGS_OFFSET_FROM_TABLE to sv.h
Stow BmRARE in the SvPVX, and so delete xbm_rare.
Can you see what it is yet?
p4raw-id: //depot/perl@29524
Diffstat (limited to 'sv.h')
-rw-r--r-- | sv.h | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -546,7 +546,6 @@ struct xpvbm { HV* xmg_stash; /* class package */ U16 xbm_previous; /* how many characters in string before rare? */ - U8 xbm_rare; /* rarest character in string */ }; /* This structure must match XPVCV in cv.h */ @@ -1310,12 +1309,22 @@ the scalar's value cannot change unless written to. } \ } STMT_END + +#define PERL_FBM_TABLE_OFFSET 5 /* Number of bytes between EOS and table */ +#define PERL_FBM_FLAGS_OFFSET_FROM_TABLE -1 +#define PERL_FBM_RARE_OFFSET_FROM_TABLE -4 + +/* SvPOKp not SvPOK in the assertion because the string can be tainted! eg + perl -T -e '/$^X/' +*/ #if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) # define BmRARE(sv) \ (*({ SV *const _svi = (SV *) (sv); \ assert(SvTYPE(_svi) == SVt_PVBM); \ assert(SvVALID(_svi)); \ - &(((XPVBM*) SvANY(_svi))->xbm_rare); \ + assert(SvPOKp(_svi)); \ + (U8*)(SvEND(_svi) \ + + PERL_FBM_TABLE_OFFSET + PERL_FBM_RARE_OFFSET_FROM_TABLE); \ })) # define BmUSEFUL(sv) \ (*({ SV *const _svi = (SV *) (sv); \ @@ -1331,7 +1340,10 @@ the scalar's value cannot change unless written to. &(((XPVBM*) SvANY(_svi))->xbm_previous); \ })) #else -# define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare +# define BmRARE(sv) \ + (*(U8*)(SvEND(sv) \ + + PERL_FBM_TABLE_OFFSET + PERL_FBM_RARE_OFFSET_FROM_TABLE)) + # define BmUSEFUL(sv) ((XPVBM*) SvANY(sv))->xiv_u.xivu_i32 # define BmPREVIOUS(sv) ((XPVBM*) SvANY(sv))->xbm_previous #endif |