/* 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;
- 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; */
=for apidoc AmU||Nullav
Null AV pointer.
+(deprecated - use C<(AV *)NULL> instead)
+
=head1 Array Manipulation Functions
=for apidoc Am|int|AvFILL|AV* av
=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))
#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