diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-05-29 17:46:39 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-05-29 17:46:39 +0000 |
commit | 311a25d9bdebead7c924f8195b0287fe2a60a568 (patch) | |
tree | 76ec442d5d0e9d206c50c1c2c9b052e44146b77a /sv.h | |
parent | b08468124c2de39dce34c2652895d4c7023c7c4d (diff) | |
download | perl-311a25d9bdebead7c924f8195b0287fe2a60a568.tar.gz |
Change the IV to a union.
Revert the NV union back to a plain NV
Transpose the positions of IV and NV (NV is now first)
Don't allocate the NV for PV,PVIV,PVAV and PVHV (last 2 non-allocations
currently disabled by default)
p4raw-id: //depot/perl@24617
Diffstat (limited to 'sv.h')
-rw-r--r-- | sv.h | 141 |
1 files changed, 66 insertions, 75 deletions
@@ -275,7 +275,7 @@ perform the upgrade if necessary. See C<svtype>. #define SVpav_REIFY 0x80000000 /* can become real */ struct xpv { - IV xpv_dummy; /* This isn't allocated. */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ }; @@ -290,68 +290,79 @@ typedef struct { #endif struct xpviv { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ + union { + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; }; +#if 0 +typedef struct xpviv xpviv_allocated; +#else +typedef struct { + STRLEN xpv_cur; /* length of svu_pv as a C string */ + STRLEN xpv_len; /* allocated size */ + union { + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; +} xpviv_allocated; +#endif + +#define xiv_iv xiv_u.xivu_iv + struct xpvuv { - UV xuv_uv; /* unsigned value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ + union { + IV xuvu_iv; + UV xuvu_uv; /* unsigned value or pv offset */ + void * xuvu_p1; + } xuv_u; }; +#define xuv_uv xuv_u.xuvu_uv + struct xpvnv { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; }; -#define xnv_nv xnv_u.xnvu_nv - /* These structure must match the beginning of struct xpvhv in hv.h. */ struct xpvmg { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ }; struct xpvlv { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -370,19 +381,14 @@ struct xpvlv { }; struct xpvgv { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -394,19 +400,14 @@ struct xpvgv { }; struct xpvbm { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -420,19 +421,14 @@ struct xpvbm { typedef U16 cv_flags_t; struct xpvfm { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ @@ -454,19 +450,14 @@ struct xpvfm { }; struct xpvio { - IV xiv_iv; /* integer value or pv offset */ + NV xnv_nv; /* numeric value, if any */ STRLEN xpv_cur; /* length of svu_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { - struct { - void *xnv_p1; - union { - void *xnv_p2; - IV xnv_i2; - } xnv_u2; - } xnv_s; - NV xnvu_nv; /* numeric value, if any */ - } xnv_u; + IV xivu_iv; /* integer value or pv offset */ + UV xivu_uv; + void * xivu_p1; + } xiv_u; MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_stash; /* class package */ |