summaryrefslogtreecommitdiff
path: root/hv.h
diff options
context:
space:
mode:
authorMarcus Holland-Moritz <mhx-perl@gmx.net>2007-12-29 19:17:42 +0100
committerMarcus Holland-Moritz <mhx-perl@gmx.net>2007-12-30 10:30:15 +0000
commit20f4945e16943f141ab760ffdcdbf39a5f3b734e (patch)
treec11ee3b84517648779c89e56235d14bfb9a838ac /hv.h
parent02f90d034df1b2bf848e5c8f7ede725dc7c7faa9 (diff)
downloadperl-20f4945e16943f141ab760ffdcdbf39a5f3b734e.tar.gz
factor out duplicate code in struct xpv*
Message-ID: <20071229181742.1933db40@r2d2> p4raw-id: //depot/perl@32783
Diffstat (limited to 'hv.h')
-rw-r--r--hv.h56
1 files changed, 15 insertions, 41 deletions
diff --git a/hv.h b/hv.h
index dd35ae58e6..b1f2ce2006 100644
--- a/hv.h
+++ b/hv.h
@@ -66,57 +66,31 @@ struct xpvhv_aux {
struct mro_meta *xhv_mro_meta;
};
+#define _XPVHV_ALLOCATED_HEAD \
+ STRLEN xhv_fill; /* how full xhv_array currently is */ \
+ STRLEN xhv_max; /* subscript of last element of xhv_array */
+
+#define _XPVHV_HEAD \
+ union _xnvu xnv_u; \
+ _XPVHV_ALLOCATED_HEAD
+
/* hash structure: */
/* This structure must match the beginning of struct xpvmg in sv.h. */
struct xpvhv {
- union {
- NV xnv_nv; /* numeric value, if any */
- HV * xgv_stash;
- struct {
- U32 xlow;
- U32 xhigh;
- } xpad_cop_seq; /* used by pad.c for cop_sequence */
- struct {
- U32 xbm_previous; /* how many characters in string before rare? */
- U8 xbm_flags;
- U8 xbm_rare; /* rarest character in string */
- } xbm_s; /* fields from PVBM */
- } xnv_u;
- STRLEN xhv_fill; /* how full xhv_array currently is */
- STRLEN xhv_max; /* subscript of last element of xhv_array */
- union {
- IV xivu_iv; /* integer value or pv offset */
- UV xivu_uv;
- void * xivu_p1;
- I32 xivu_i32;
- HEK * xivu_namehek;
- } xiv_u;
- union {
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
- } xmg_u;
- HV* xmg_stash; /* class package */
+ _XPVHV_HEAD;
+ _XPVMG_HEAD;
};
#define xhv_keys xiv_u.xivu_iv
typedef struct {
- STRLEN xhv_fill; /* how full xhv_array currently is */
- STRLEN xhv_max; /* subscript of last element of xhv_array */
- union {
- IV xivu_iv; /* integer value or pv offset */
- UV xivu_uv;
- void * xivu_p1;
- I32 xivu_i32;
- HEK * xivu_namehek;
- } xiv_u;
- union {
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
- } xmg_u;
- HV* xmg_stash; /* class package */
+ _XPVHV_ALLOCATED_HEAD;
+ _XPVMG_HEAD;
} xpvhv_allocated;
+#undef _XPVHV_ALLOCATED_HEAD
+#undef _XPVHV_HEAD
+
/* hash a key */
/* FYI: This is the "One-at-a-Time" algorithm by Bob Jenkins
* from requirements by Colin Plumb.