X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.h;h=88740450992ecefd42e3707c06906d4b6e28af0b;hb=a13351642e6a26cfc620bdb31b15678fd22d224f;hp=06ecc7a656027f1ffb90a53081c5ae49ffd9734d;hpb=bc641c27709fc92be4f44291a8f5fa3a483662fd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.h b/av.h index 06ecc7a..8874045 100644 --- a/av.h +++ b/av.h @@ -8,53 +8,27 @@ * */ +#define _XPVAV_ALLOCATED_HEAD \ + SSize_t xav_fill; /* Index of last element present */ \ + SSize_t xav_max /* max index for which array has space */ + +#define _XPVAV_HEAD \ + union _xnvu xnv_u; \ + _XPVAV_ALLOCATED_HEAD + struct xpvav { - 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; - 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; - 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_HEAD; + _XPVMG_HEAD; }; typedef struct { - 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; - 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_HEAD; + _XPVMG_HEAD; } xpvav_allocated; +#undef _XPVAV_ALLOCATED_HEAD +#undef _XPVAV_HEAD + /* SV** xav_alloc; */ #define xav_alloc xiv_u.xivu_p1 /* SV* xav_arylen; */ @@ -83,6 +57,8 @@ typedef struct { =for apidoc AmU||Nullav Null AV pointer. +(deprecated - use C<(AV *)NULL> instead) + =head1 Array Manipulation Functions =for apidoc Am|int|AvFILL|AV* av @@ -91,7 +67,9 @@ Same as C. Deprecated, use C instead. =cut */ -#define Nullav Null(AV*) +#ifndef PERL_CORE +# define Nullav Null(AV*) +#endif #define AvARRAY(av) ((av)->sv_u.svu_array) #define AvALLOC(av) (*((SV***)&((XPVAV*) SvANY(av))->xav_alloc)) @@ -116,6 +94,16 @@ Same as C. Deprecated, use C instead. #define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES" /* +=for apidoc newAV + +Creates a new AV. The reference count is set to 1. + +=cut +*/ + +#define newAV() ((AV *)newSV_type(SVt_PVAV)) + +/* * Local variables: * c-indentation-style: bsd * c-basic-offset: 4