3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * '...for the Entwives desired order, and plenty, and peace (by which they
13 * meant that things should remain where they had set them).' --Treebeard
15 * [p.476 of _The Lord of the Rings_, III/iv: "Treebeard"]
19 =head1 Array Manipulation Functions
27 Perl_av_reify(pTHX_ AV *av)
31 PERL_ARGS_ASSERT_AV_REIFY;
32 assert(SvTYPE(av) == SVt_PVAV);
37 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
38 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array");
41 while (key > AvFILLp(av) + 1)
42 AvARRAY(av)[--key] = NULL;
44 SV * const sv = AvARRAY(av)[--key];
45 if (sv != &PL_sv_undef)
46 SvREFCNT_inc_simple_void(sv);
48 key = AvARRAY(av) - AvALLOC(av);
50 AvALLOC(av)[--key] = NULL;
58 Pre-extend an array. The C<key> is the index to which the array should be
65 Perl_av_extend(pTHX_ AV *av, SSize_t key)
69 PERL_ARGS_ASSERT_AV_EXTEND;
70 assert(SvTYPE(av) == SVt_PVAV);
72 mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied);
74 SV *arg1 = sv_newmortal();
75 sv_setiv(arg1, (IV)(key + 1));
76 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(EXTEND), G_DISCARD, 1,
80 av_extend_guts(av,key,&AvMAX(av),&AvALLOC(av),&AvARRAY(av));
83 /* The guts of av_extend. *Not* for general use! */
85 Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp,
88 PERL_ARGS_ASSERT_AV_EXTEND_GUTS;
90 if (key < -1) /* -1 is legal */
92 "panic: av_extend_guts() negative count (%"IVdf")", (IV)key);
99 if (av && *allocp != *arrayp) {
100 ary = *allocp + AvFILLp(av) + 1;
101 tmp = *arrayp - *allocp;
102 Move(*arrayp, *allocp, AvFILLp(av)+1, SV*);
109 if (key > *maxp - 10) {
110 newmax = key + *maxp;
117 #ifdef Perl_safesysmalloc_size
118 /* Whilst it would be quite possible to move this logic around
119 (as I did in the SV code), so as to set AvMAX(av) early,
120 based on calling Perl_safesysmalloc_size() immediately after
121 allocation, I'm not convinced that it is a great idea here.
122 In an array we have to loop round setting everything to
123 NULL, which means writing to memory, potentially lots
124 of it, whereas for the SV buffer case we don't touch the
125 "bonus" memory. So there there is no cost in telling the
126 world about it, whereas here we have to do work before we can
127 tell the world about it, and that work involves writing to
128 memory that might never be read. So, I feel, better to keep
129 the current lazy system of only writing to it if our caller
130 has a need for more space. NWC */
131 newmax = Perl_safesysmalloc_size((void*)*allocp) /
132 sizeof(const SV *) - 1;
137 /* overflow-safe version of newmax = key + *maxp/5 */
139 newmax = (key > SSize_t_MAX - newmax)
140 ? SSize_t_MAX : key + newmax;
143 #ifdef PERL_MALLOC_WRAP /* Duplicated in pp_hot.c */
144 static const char oom_array_extend[] =
145 "Out of memory during array extend";
147 /* it should really be newmax+1 here, but if newmax
148 * happens to equal SSize_t_MAX, then newmax+1 is
149 * undefined. This means technically we croak one
150 * index lower than we should in theory; in practice
151 * its unlikely the system has SSize_t_MAX/sizeof(SV*)
153 MEM_WRAP_CHECK_1(newmax, SV*, oom_array_extend);
155 #ifdef STRESS_REALLOC
157 SV ** const old_alloc = *allocp;
158 Newx(*allocp, newmax+1, SV*);
159 Copy(old_alloc, *allocp, *maxp + 1, SV*);
163 Renew(*allocp,newmax+1, SV*);
165 #ifdef Perl_safesysmalloc_size
168 ary = *allocp + *maxp + 1;
169 tmp = newmax - *maxp;
170 if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */
171 PL_stack_sp = *allocp + (PL_stack_sp - PL_stack_base);
172 PL_stack_base = *allocp;
173 PL_stack_max = PL_stack_base + newmax;
177 newmax = key < 3 ? 3 : key;
179 #ifdef PERL_MALLOC_WRAP /* Duplicated in pp_hot.c */
180 static const char oom_array_extend[] =
181 "Out of memory during array extend";
183 /* see comment above about newmax+1*/
184 MEM_WRAP_CHECK_1(newmax, SV*, oom_array_extend);
186 Newx(*allocp, newmax+1, SV*);
189 *allocp[0] = NULL; /* For the stacks */
191 if (av && AvREAL(av)) {
205 Returns the SV at the specified index in the array. The C<key> is the
206 index. If lval is true, you are guaranteed to get a real SV back (in case
207 it wasn't real before), which you can then modify. Check that the return
208 value is non-null before dereferencing it to a C<SV*>.
210 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
211 more information on how to use this function on tied arrays.
213 The rough perl equivalent is C<$myarray[$idx]>.
219 S_adjust_index(pTHX_ AV *av, const MAGIC *mg, SSize_t *keyp)
221 bool adjust_index = 1;
223 /* Handle negative array indices 20020222 MJD */
224 SV * const ref = SvTIED_obj(MUTABLE_SV(av), mg);
226 if (SvROK(ref) && SvOBJECT(SvRV(ref))) {
227 SV * const * const negative_indices_glob =
228 hv_fetchs(SvSTASH(SvRV(ref)), NEGATIVE_INDICES_VAR, 0);
230 if (negative_indices_glob && isGV(*negative_indices_glob)
231 && SvTRUE(GvSV(*negative_indices_glob)))
237 *keyp += AvFILL(av) + 1;
245 Perl_av_fetch(pTHX_ AV *av, SSize_t key, I32 lval)
247 PERL_ARGS_ASSERT_AV_FETCH;
248 assert(SvTYPE(av) == SVt_PVAV);
250 if (SvRMAGICAL(av)) {
251 const MAGIC * const tied_magic
252 = mg_find((const SV *)av, PERL_MAGIC_tied);
253 if (tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata)) {
256 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
261 sv_upgrade(sv, SVt_PVLV);
262 mg_copy(MUTABLE_SV(av), sv, 0, key);
263 if (!tied_magic) /* for regdata, force leavesub to make copies */
266 LvTARG(sv) = sv; /* fake (SV**) */
267 return &(LvTARG(sv));
272 key += AvFILLp(av) + 1;
277 if (key > AvFILLp(av) || !AvARRAY(av)[key]) {
279 return lval ? av_store(av,key,newSV(0)) : NULL;
282 if (AvREIFY(av) && SvIS_FREED(AvARRAY(av)[key])) {
283 /* eg. @_ could have freed elts */
284 AvARRAY(av)[key] = NULL; /* 1/2 reify */
287 return &AvARRAY(av)[key];
293 Stores an SV in an array. The array index is specified as C<key>. The
294 return value will be C<NULL> if the operation failed or if the value did not
295 need to be actually stored within the array (as in the case of tied
296 arrays). Otherwise, it can be dereferenced
297 to get the C<SV*> that was stored
300 Note that the caller is responsible for suitably incrementing the reference
301 count of C<val> before the call, and decrementing it if the function
304 Approximate Perl equivalent: C<$myarray[$key] = $val;>.
306 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
307 more information on how to use this function on tied arrays.
313 Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val)
317 PERL_ARGS_ASSERT_AV_STORE;
318 assert(SvTYPE(av) == SVt_PVAV);
320 /* S_regclass relies on being able to pass in a NULL sv
321 (unicode_alternate may be NULL).
324 if (SvRMAGICAL(av)) {
325 const MAGIC * const tied_magic = mg_find((const SV *)av, PERL_MAGIC_tied);
328 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
332 mg_copy(MUTABLE_SV(av), val, 0, key);
340 key += AvFILL(av) + 1;
345 if (SvREADONLY(av) && key >= AvFILL(av))
346 Perl_croak_no_modify();
348 if (!AvREAL(av) && AvREIFY(av))
353 if (AvFILLp(av) < key) {
355 if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
356 PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */
358 ary[++AvFILLp(av)] = NULL;
359 } while (AvFILLp(av) < key);
364 SvREFCNT_dec(ary[key]);
366 if (SvSMAGICAL(av)) {
367 const MAGIC *mg = SvMAGIC(av);
369 for (; mg; mg = mg->mg_moremagic) {
370 if (!isUPPER(mg->mg_type)) continue;
372 sv_magic(val, MUTABLE_SV(av), toLOWER(mg->mg_type), 0, key);
374 if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa) {
375 PL_delaymagic |= DM_ARRAY_ISA;
380 mg_set(MUTABLE_SV(av));
388 Creates a new AV and populates it with a list of SVs. The SVs are copied
389 into the array, so they may be freed after the call to C<av_make>. The new AV
390 will have a reference count of 1.
392 Perl equivalent: C<my @new_array = ($scalar1, $scalar2, $scalar3...);>
398 Perl_av_make(pTHX_ SSize_t size, SV **strp)
400 AV * const av = MUTABLE_AV(newSV_type(SVt_PVAV));
401 /* sv_upgrade does AvREAL_only() */
402 PERL_ARGS_ASSERT_AV_MAKE;
403 assert(SvTYPE(av) == SVt_PVAV);
405 if (size) { /* "defined" was returning undef for size==0 anyway. */
411 AvMAX(av) = size - 1;
415 for (i = 0; i < size; i++) {
418 /* Don't let sv_setsv swipe, since our source array might
419 have multiple references to the same temp scalar (e.g.
420 from a list slice) */
422 SvGETMAGIC(*strp); /* before newSV, in case it dies */
425 sv_setsv_flags(ary[i], *strp,
426 SV_DO_COW_SVSETSV|SV_NOSTEAL);
429 SvREFCNT_inc_simple_void_NN(av);
438 Frees the all the elements of an array, leaving it empty.
439 The XS equivalent of C<@array = ()>. See also L</av_undef>.
441 Note that it is possible that the actions of a destructor called directly
442 or indirectly by freeing an element of the array could cause the reference
443 count of the array itself to be reduced (e.g. by deleting an entry in the
444 symbol table). So it is a possibility that the AV could have been freed
445 (or even reallocated) on return from the call unless you hold a reference
452 Perl_av_clear(pTHX_ AV *av)
457 PERL_ARGS_ASSERT_AV_CLEAR;
458 assert(SvTYPE(av) == SVt_PVAV);
461 if (SvREFCNT(av) == 0) {
462 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array");
467 Perl_croak_no_modify();
469 /* Give any tie a chance to cleanup first */
470 if (SvRMAGICAL(av)) {
471 const MAGIC* const mg = SvMAGIC(av);
472 if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa)
473 PL_delaymagic |= DM_ARRAY_ISA;
475 mg_clear(MUTABLE_SV(av));
481 if ((real = !!AvREAL(av))) {
482 SV** const ary = AvARRAY(av);
483 SSize_t index = AvFILLp(av) + 1;
485 SAVEFREESV(SvREFCNT_inc_simple_NN(av));
487 SV * const sv = ary[--index];
488 /* undef the slot before freeing the value, because a
489 * destructor might try to modify this array */
494 extra = AvARRAY(av) - AvALLOC(av);
497 AvARRAY(av) = AvALLOC(av);
506 Undefines the array. The XS equivalent of C<undef(@array)>.
508 As well as freeing all the elements of the array (like C<av_clear()>), this
509 also frees the memory used by the av to store its list of scalars.
511 See L</av_clear> for a note about the array possibly being invalid on
518 Perl_av_undef(pTHX_ AV *av)
522 PERL_ARGS_ASSERT_AV_UNDEF;
523 assert(SvTYPE(av) == SVt_PVAV);
525 /* Give any tie a chance to cleanup first */
526 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
529 if ((real = !!AvREAL(av))) {
530 SSize_t key = AvFILLp(av) + 1;
532 SAVEFREESV(SvREFCNT_inc_simple_NN(av));
534 SvREFCNT_dec(AvARRAY(av)[--key]);
537 Safefree(AvALLOC(av));
540 AvMAX(av) = AvFILLp(av) = -1;
542 if(SvRMAGICAL(av)) mg_clear(MUTABLE_SV(av));
548 =for apidoc av_create_and_push
550 Push an SV onto the end of the array, creating the array if necessary.
551 A small internal helper function to remove a commonly duplicated idiom.
557 Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
559 PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH;
569 Pushes an SV (transferring control of one reference count) onto the end of the
570 array. The array will grow automatically to accommodate the addition.
572 Perl equivalent: C<push @myarray, $elem;>.
578 Perl_av_push(pTHX_ AV *av, SV *val)
582 PERL_ARGS_ASSERT_AV_PUSH;
583 assert(SvTYPE(av) == SVt_PVAV);
586 Perl_croak_no_modify();
588 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
589 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(PUSH), G_DISCARD, 1,
593 av_store(av,AvFILLp(av)+1,val);
599 Removes one SV from the end of the array, reducing its size by one and
600 returning the SV (transferring control of one reference count) to the
601 caller. Returns C<&PL_sv_undef> if the array is empty.
603 Perl equivalent: C<pop(@myarray);>
609 Perl_av_pop(pTHX_ AV *av)
614 PERL_ARGS_ASSERT_AV_POP;
615 assert(SvTYPE(av) == SVt_PVAV);
618 Perl_croak_no_modify();
619 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
620 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(POP), 0, 0);
622 retval = newSVsv(retval);
627 retval = AvARRAY(av)[AvFILLp(av)];
628 AvARRAY(av)[AvFILLp(av)--] = NULL;
630 mg_set(MUTABLE_SV(av));
631 return retval ? retval : &PL_sv_undef;
636 =for apidoc av_create_and_unshift_one
638 Unshifts an SV onto the beginning of the array, creating the array if
640 A small internal helper function to remove a commonly duplicated idiom.
646 Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
648 PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE;
653 return av_store(*avp, 0, val);
657 =for apidoc av_unshift
659 Unshift the given number of C<undef> values onto the beginning of the
660 array. The array will grow automatically to accommodate the addition. You
661 must then use C<av_store> to assign values to these new elements.
663 Perl equivalent: S<C<unshift @myarray, ( (undef) x $n );>>
669 Perl_av_unshift(pTHX_ AV *av, SSize_t num)
674 PERL_ARGS_ASSERT_AV_UNSHIFT;
675 assert(SvTYPE(av) == SVt_PVAV);
678 Perl_croak_no_modify();
680 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
681 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(UNSHIFT),
682 G_DISCARD | G_UNDEF_FILL, num);
688 if (!AvREAL(av) && AvREIFY(av))
690 i = AvARRAY(av) - AvALLOC(av);
698 AvARRAY(av) = AvARRAY(av) - i;
702 const SSize_t i = AvFILLp(av);
703 /* Create extra elements */
704 const SSize_t slide = i > 0 ? i : 0;
706 av_extend(av, i + num);
709 Move(ary, ary + num, i + 1, SV*);
713 /* Make extra elements into a buffer */
715 AvFILLp(av) -= slide;
716 AvARRAY(av) = AvARRAY(av) + slide;
723 Removes one SV from the start of the array, reducing its size by one and
724 returning the SV (transferring control of one reference count) to the
725 caller. Returns C<&PL_sv_undef> if the array is empty.
727 Perl equivalent: C<shift(@myarray);>
733 Perl_av_shift(pTHX_ AV *av)
738 PERL_ARGS_ASSERT_AV_SHIFT;
739 assert(SvTYPE(av) == SVt_PVAV);
742 Perl_croak_no_modify();
743 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
744 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(SHIFT), 0, 0);
746 retval = newSVsv(retval);
751 retval = *AvARRAY(av);
754 AvARRAY(av) = AvARRAY(av) + 1;
758 mg_set(MUTABLE_SV(av));
759 return retval ? retval : &PL_sv_undef;
763 =for apidoc av_top_index
765 Returns the highest index in the array. The number of elements in the
766 array is S<C<av_top_index(av) + 1>>. Returns -1 if the array is empty.
768 The Perl equivalent for this is C<$#myarray>.
770 (A slightly shorter form is C<av_tindex>.)
774 Same as L</av_top_index>. Note that, unlike what the name implies, it returns
775 the highest index in the array, so to get the size of the array you need to use
776 S<C<av_len(av) + 1>>. This is unlike L</sv_len>, which returns what you would
783 Perl_av_len(pTHX_ AV *av)
785 PERL_ARGS_ASSERT_AV_LEN;
787 return av_top_index(av);
793 Set the highest index in the array to the given number, equivalent to
794 Perl's S<C<$#array = $fill;>>.
796 The number of elements in the array will be S<C<fill + 1>> after
797 C<av_fill()> returns. If the array was previously shorter, then the
798 additional elements appended are set to NULL. If the array
799 was longer, then the excess elements are freed. S<C<av_fill(av, -1)>> is
800 the same as C<av_clear(av)>.
805 Perl_av_fill(pTHX_ AV *av, SSize_t fill)
809 PERL_ARGS_ASSERT_AV_FILL;
810 assert(SvTYPE(av) == SVt_PVAV);
814 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
815 SV *arg1 = sv_newmortal();
816 sv_setiv(arg1, (IV)(fill + 1));
817 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(STORESIZE), G_DISCARD,
821 if (fill <= AvMAX(av)) {
822 SSize_t key = AvFILLp(av);
823 SV** const ary = AvARRAY(av);
827 SvREFCNT_dec(ary[key]);
838 mg_set(MUTABLE_SV(av));
841 (void)av_store(av,fill,NULL);
845 =for apidoc av_delete
847 Deletes the element indexed by C<key> from the array, makes the element mortal,
848 and returns it. If C<flags> equals C<G_DISCARD>, the element is freed and null
849 is returned. Perl equivalent: S<C<my $elem = delete($myarray[$idx]);>> for the
850 non-C<G_DISCARD> version and a void-context S<C<delete($myarray[$idx]);>> for the
851 C<G_DISCARD> version.
856 Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags)
860 PERL_ARGS_ASSERT_AV_DELETE;
861 assert(SvTYPE(av) == SVt_PVAV);
864 Perl_croak_no_modify();
866 if (SvRMAGICAL(av)) {
867 const MAGIC * const tied_magic
868 = mg_find((const SV *)av, PERL_MAGIC_tied);
869 if ((tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata))) {
872 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
875 svp = av_fetch(av, key, TRUE);
879 if (mg_find(sv, PERL_MAGIC_tiedelem)) {
880 sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */
889 key += AvFILL(av) + 1;
894 if (key > AvFILLp(av))
897 if (!AvREAL(av) && AvREIFY(av))
899 sv = AvARRAY(av)[key];
900 AvARRAY(av)[key] = NULL;
901 if (key == AvFILLp(av)) {
904 } while (--key >= 0 && !AvARRAY(av)[key]);
907 mg_set(MUTABLE_SV(av));
910 if (flags & G_DISCARD) {
921 =for apidoc av_exists
923 Returns true if the element indexed by C<key> has been initialized.
925 This relies on the fact that uninitialized array elements are set to
928 Perl equivalent: C<exists($myarray[$key])>.
933 Perl_av_exists(pTHX_ AV *av, SSize_t key)
935 PERL_ARGS_ASSERT_AV_EXISTS;
936 assert(SvTYPE(av) == SVt_PVAV);
938 if (SvRMAGICAL(av)) {
939 const MAGIC * const tied_magic
940 = mg_find((const SV *)av, PERL_MAGIC_tied);
941 const MAGIC * const regdata_magic
942 = mg_find((const SV *)av, PERL_MAGIC_regdata);
943 if (tied_magic || regdata_magic) {
945 /* Handle negative array indices 20020222 MJD */
947 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
951 if(key >= 0 && regdata_magic) {
952 if (key <= AvFILL(av))
958 SV * const sv = sv_newmortal();
959 mg_copy(MUTABLE_SV(av), sv, 0, key);
960 mg = mg_find(sv, PERL_MAGIC_tiedelem);
962 magic_existspack(sv, mg);
964 I32 retbool = SvTRUE_nomg_NN(sv);
965 return cBOOL(retbool);
973 key += AvFILL(av) + 1;
978 if (key <= AvFILLp(av) && AvARRAY(av)[key])
987 S_get_aux_mg(pTHX_ AV *av) {
990 PERL_ARGS_ASSERT_GET_AUX_MG;
991 assert(SvTYPE(av) == SVt_PVAV);
993 mg = mg_find((const SV *)av, PERL_MAGIC_arylen_p);
996 mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p,
997 &PL_vtbl_arylen_p, 0, 0);
999 /* sv_magicext won't set this for us because we pass in a NULL obj */
1000 mg->mg_flags |= MGf_REFCOUNTED;
1006 Perl_av_arylen_p(pTHX_ AV *av) {
1007 MAGIC *const mg = get_aux_mg(av);
1009 PERL_ARGS_ASSERT_AV_ARYLEN_P;
1010 assert(SvTYPE(av) == SVt_PVAV);
1012 return &(mg->mg_obj);
1016 Perl_av_iter_p(pTHX_ AV *av) {
1017 MAGIC *const mg = get_aux_mg(av);
1019 PERL_ARGS_ASSERT_AV_ITER_P;
1020 assert(SvTYPE(av) == SVt_PVAV);
1022 #if IVSIZE == I32SIZE
1023 return (IV *)&(mg->mg_len);
1027 mg->mg_len = IVSIZE;
1029 mg->mg_ptr = (char *) temp;
1031 return (IV *)mg->mg_ptr;
1036 * ex: set ts=8 sts=4 sw=4 et: