X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.h;h=d91b6f0086141beea9f8ef21181a68177b05ab86;hb=af5683d1a11b86657bb9d3800d54c4d65ca7b5a0;hp=9ed171d84a14c7c8ec534d9f781fd8462643f818;hpb=a3874608cd3bf4e33ccd66b8bb03b2aeda20af14;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.h b/av.h index 9ed171d..d91b6f0 100644 --- a/av.h +++ b/av.h @@ -9,19 +9,27 @@ */ struct xpvav { - NV xnv_nv; /* numeric value, if any */ + union { + NV xnv_nv; /* numeric value, if any */ + HV * xgv_stash; + } xnv_u; SSize_t xav_fill; /* Index of last element present */ SSize_t xav_max; /* max index for which array has space */ union { IV xivu_iv; /* integer value or pv offset */ UV xivu_uv; void * xivu_p1; + I32 xivu_i32; + HEK * xivu_namehek; } xiv_u; - MAGIC* xmg_magic; /* magic for scalar array */ + 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 */ }; -#if !defined(PERL_EXPERIMENTAL_LAYOUT) +#if 0 typedef struct xpvav xpvav_allocated; #else typedef struct { @@ -31,8 +39,13 @@ typedef struct { IV xivu_iv; /* integer value or pv offset */ UV xivu_uv; void * xivu_p1; + I32 xivu_i32; + HEK * xivu_namehek; } xiv_u; - MAGIC* xmg_magic; /* magic for scalar array */ + 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 */ } xpvav_allocated; #endif @@ -41,12 +54,12 @@ typedef struct { #define xav_alloc xiv_u.xivu_p1 /* SV* xav_arylen; */ -/* AVf_REAL is set for all AVs whose xav_array contents are refcounted. +/* SVpav_REAL is set for all AVs whose xav_array contents are refcounted. * Some things like "@_" and the scratchpad list do not set this, to * indicate that they are cheating (for efficiency) by not refcounting * the AV's contents. * - * AVf_REIFY is only meaningful on such "fake" AVs (i.e. where AVf_REAL + * SVpav_REIFY is only meaningful on such "fake" AVs (i.e. where SVpav_REAL * is not set). It indicates that the fake AV is capable of becoming * real if the array needs to be modified in some way. Functions that * modify fake AVs check both flags to call av_reify() as appropriate.