diff options
author | Marcus Holland-Moritz <mhx-perl@gmx.net> | 2007-12-29 19:17:42 +0100 |
---|---|---|
committer | Marcus Holland-Moritz <mhx-perl@gmx.net> | 2007-12-30 10:30:15 +0000 |
commit | 20f4945e16943f141ab760ffdcdbf39a5f3b734e (patch) | |
tree | c11ee3b84517648779c89e56235d14bfb9a838ac /hv.h | |
parent | 02f90d034df1b2bf848e5c8f7ede725dc7c7faa9 (diff) | |
download | perl-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.h | 56 |
1 files changed, 15 insertions, 41 deletions
@@ -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. |