summaryrefslogtreecommitdiff
path: root/sv.h
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-12-11 22:18:53 +0000
committerNicholas Clark <nick@ccl4.org>2006-12-11 22:18:53 +0000
commit373b357f184d67d2c589b8aca81c803276397db5 (patch)
treefae55c01d901014d715a4b72edadc684e1a32e62 /sv.h
parentfe9016888567104767dbf71c5a5b5c31341af1f4 (diff)
downloadperl-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.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/sv.h b/sv.h
index 4d7ad362c3..8c98c892cc 100644
--- a/sv.h
+++ b/sv.h
@@ -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