X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/69ecfd1277806cc4f0867436789903927289b9b2..43b09ad7a33220d66fb5299f7edd948446f7afa7:/av.h diff --git a/av.h b/av.h index d91b6f0..8874045 100644 --- a/av.h +++ b/av.h @@ -1,54 +1,33 @@ /* av.h * * Copyright (C) 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2005, by Larry Wall and others + * 2000, 2001, 2002, 2005, 2006, 2007, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * */ +#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; - } 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; }; -#if 0 -typedef struct xpvav xpvav_allocated; -#else 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; -#endif + +#undef _XPVAV_ALLOCATED_HEAD +#undef _XPVAV_HEAD /* SV** xav_alloc; */ #define xav_alloc xiv_u.xivu_p1 @@ -78,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 @@ -86,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)) @@ -111,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