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 += AvFILL(av) + 1;
277 if (key > AvFILLp(av) || !AvARRAY(av)[key]) {
279 return lval ? av_store(av,key,newSV(0)) : NULL;
283 && (!AvARRAY(av)[key] /* eg. @_ could have freed elts */
284 || SvIS_FREED(AvARRAY(av)[key]))) {
285 AvARRAY(av)[key] = NULL; /* 1/2 reify */
288 return &AvARRAY(av)[key];
294 Stores an SV in an array. The array index is specified as C<key>. The
295 return value will be C<NULL> if the operation failed or if the value did not
296 need to be actually stored within the array (as in the case of tied
297 arrays). Otherwise, it can be dereferenced
298 to get the C<SV*> that was stored
301 Note that the caller is responsible for suitably incrementing the reference
302 count of C<val> before the call, and decrementing it if the function
305 Approximate Perl equivalent: C<$myarray[$key] = $val;>.
307 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
308 more information on how to use this function on tied arrays.
314 Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val)
318 PERL_ARGS_ASSERT_AV_STORE;
319 assert(SvTYPE(av) == SVt_PVAV);
321 /* S_regclass relies on being able to pass in a NULL sv
322 (unicode_alternate may be NULL).
325 if (SvRMAGICAL(av)) {
326 const MAGIC * const tied_magic = mg_find((const SV *)av, PERL_MAGIC_tied);
329 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
333 mg_copy(MUTABLE_SV(av), val, 0, key);
341 key += AvFILL(av) + 1;
346 if (SvREADONLY(av) && key >= AvFILL(av))
347 Perl_croak_no_modify();
349 if (!AvREAL(av) && AvREIFY(av))
354 if (AvFILLp(av) < key) {
356 if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
357 PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */
359 ary[++AvFILLp(av)] = NULL;
360 } while (AvFILLp(av) < key);
365 SvREFCNT_dec(ary[key]);
367 if (SvSMAGICAL(av)) {
368 const MAGIC *mg = SvMAGIC(av);
370 for (; mg; mg = mg->mg_moremagic) {
371 if (!isUPPER(mg->mg_type)) continue;
373 sv_magic(val, MUTABLE_SV(av), toLOWER(mg->mg_type), 0, key);
375 if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa) {
376 PL_delaymagic |= DM_ARRAY_ISA;
381 mg_set(MUTABLE_SV(av));
389 Creates a new AV and populates it with a list of SVs. The SVs are copied
390 into the array, so they may be freed after the call to C<av_make>. The new AV
391 will have a reference count of 1.
393 Perl equivalent: C<my @new_array = ($scalar1, $scalar2, $scalar3...);>
399 Perl_av_make(pTHX_ SSize_t size, SV **strp)
401 AV * const av = MUTABLE_AV(newSV_type(SVt_PVAV));
402 /* sv_upgrade does AvREAL_only() */
403 PERL_ARGS_ASSERT_AV_MAKE;
404 assert(SvTYPE(av) == SVt_PVAV);
406 if (size) { /* "defined" was returning undef for size==0 anyway. */
412 AvMAX(av) = size - 1;
416 for (i = 0; i < size; i++) {
419 /* Don't let sv_setsv swipe, since our source array might
420 have multiple references to the same temp scalar (e.g.
421 from a list slice) */
423 SvGETMAGIC(*strp); /* before newSV, in case it dies */
426 sv_setsv_flags(ary[i], *strp,
427 SV_DO_COW_SVSETSV|SV_NOSTEAL);
430 SvREFCNT_inc_simple_void_NN(av);
439 Clears an array, making it empty. Does not free the memory C<av> uses to
440 store its list of scalars. If any destructors are triggered as a result,
441 C<av> itself may be freed when this function returns.
443 Perl equivalent: C<@myarray = ();>.
449 Perl_av_clear(pTHX_ AV *av)
454 PERL_ARGS_ASSERT_AV_CLEAR;
455 assert(SvTYPE(av) == SVt_PVAV);
458 if (SvREFCNT(av) == 0) {
459 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array");
464 Perl_croak_no_modify();
466 /* Give any tie a chance to cleanup first */
467 if (SvRMAGICAL(av)) {
468 const MAGIC* const mg = SvMAGIC(av);
469 if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa)
470 PL_delaymagic |= DM_ARRAY_ISA;
472 mg_clear(MUTABLE_SV(av));
478 if ((real = !!AvREAL(av))) {
479 SV** const ary = AvARRAY(av);
480 SSize_t index = AvFILLp(av) + 1;
482 SAVEFREESV(SvREFCNT_inc_simple_NN(av));
484 SV * const sv = ary[--index];
485 /* undef the slot before freeing the value, because a
486 * destructor might try to modify this array */
491 extra = AvARRAY(av) - AvALLOC(av);
494 AvARRAY(av) = AvALLOC(av);
503 Undefines the array. Frees the memory used by the av to store its list of
504 scalars. If any destructors are triggered as a result, C<av> itself may
511 Perl_av_undef(pTHX_ AV *av)
515 PERL_ARGS_ASSERT_AV_UNDEF;
516 assert(SvTYPE(av) == SVt_PVAV);
518 /* Give any tie a chance to cleanup first */
519 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
522 if ((real = !!AvREAL(av))) {
523 SSize_t key = AvFILLp(av) + 1;
525 SAVEFREESV(SvREFCNT_inc_simple_NN(av));
527 SvREFCNT_dec(AvARRAY(av)[--key]);
530 Safefree(AvALLOC(av));
533 AvMAX(av) = AvFILLp(av) = -1;
535 if(SvRMAGICAL(av)) mg_clear(MUTABLE_SV(av));
541 =for apidoc av_create_and_push
543 Push an SV onto the end of the array, creating the array if necessary.
544 A small internal helper function to remove a commonly duplicated idiom.
550 Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
552 PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH;
562 Pushes an SV onto the end of the array. The array will grow automatically
563 to accommodate the addition. This takes ownership of one reference count.
565 Perl equivalent: C<push @myarray, $elem;>.
571 Perl_av_push(pTHX_ AV *av, SV *val)
575 PERL_ARGS_ASSERT_AV_PUSH;
576 assert(SvTYPE(av) == SVt_PVAV);
579 Perl_croak_no_modify();
581 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
582 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(PUSH), G_DISCARD, 1,
586 av_store(av,AvFILLp(av)+1,val);
592 Removes one SV from the end of the array, reducing its size by one and
593 returning the SV (transferring control of one reference count) to the
594 caller. Returns C<&PL_sv_undef> if the array is empty.
596 Perl equivalent: C<pop(@myarray);>
602 Perl_av_pop(pTHX_ AV *av)
607 PERL_ARGS_ASSERT_AV_POP;
608 assert(SvTYPE(av) == SVt_PVAV);
611 Perl_croak_no_modify();
612 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
613 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(POP), 0, 0);
615 retval = newSVsv(retval);
620 retval = AvARRAY(av)[AvFILLp(av)];
621 AvARRAY(av)[AvFILLp(av)--] = NULL;
623 mg_set(MUTABLE_SV(av));
624 return retval ? retval : &PL_sv_undef;
629 =for apidoc av_create_and_unshift_one
631 Unshifts an SV onto the beginning of the array, creating the array if
633 A small internal helper function to remove a commonly duplicated idiom.
639 Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
641 PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE;
646 return av_store(*avp, 0, val);
650 =for apidoc av_unshift
652 Unshift the given number of C<undef> values onto the beginning of the
653 array. The array will grow automatically to accommodate the addition. You
654 must then use C<av_store> to assign values to these new elements.
656 Perl equivalent: S<C<unshift @myarray, ( (undef) x $n );>>
662 Perl_av_unshift(pTHX_ AV *av, SSize_t num)
667 PERL_ARGS_ASSERT_AV_UNSHIFT;
668 assert(SvTYPE(av) == SVt_PVAV);
671 Perl_croak_no_modify();
673 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
674 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(UNSHIFT),
675 G_DISCARD | G_UNDEF_FILL, num);
681 if (!AvREAL(av) && AvREIFY(av))
683 i = AvARRAY(av) - AvALLOC(av);
691 AvARRAY(av) = AvARRAY(av) - i;
695 const SSize_t i = AvFILLp(av);
696 /* Create extra elements */
697 const SSize_t slide = i > 0 ? i : 0;
699 av_extend(av, i + num);
702 Move(ary, ary + num, i + 1, SV*);
706 /* Make extra elements into a buffer */
708 AvFILLp(av) -= slide;
709 AvARRAY(av) = AvARRAY(av) + slide;
716 Removes one SV from the start of the array, reducing its size by one and
717 returning the SV (transferring control of one reference count) to the
718 caller. Returns C<&PL_sv_undef> if the array is empty.
720 Perl equivalent: C<shift(@myarray);>
726 Perl_av_shift(pTHX_ AV *av)
731 PERL_ARGS_ASSERT_AV_SHIFT;
732 assert(SvTYPE(av) == SVt_PVAV);
735 Perl_croak_no_modify();
736 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
737 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(SHIFT), 0, 0);
739 retval = newSVsv(retval);
744 retval = *AvARRAY(av);
747 AvARRAY(av) = AvARRAY(av) + 1;
751 mg_set(MUTABLE_SV(av));
752 return retval ? retval : &PL_sv_undef;
756 =for apidoc av_top_index
758 Returns the highest index in the array. The number of elements in the
759 array is S<C<av_top_index(av) + 1>>. Returns -1 if the array is empty.
761 The Perl equivalent for this is C<$#myarray>.
763 (A slightly shorter form is C<av_tindex>.)
767 Same as L</av_top_index>. Note that, unlike what the name implies, it returns
768 the highest index in the array, so to get the size of the array you need to use
769 S<C<av_len(av) + 1>>. This is unlike L</sv_len>, which returns what you would
776 Perl_av_len(pTHX_ AV *av)
778 PERL_ARGS_ASSERT_AV_LEN;
780 return av_top_index(av);
786 Set the highest index in the array to the given number, equivalent to
787 Perl's S<C<$#array = $fill;>>.
789 The number of elements in the array will be S<C<fill + 1>> after
790 C<av_fill()> returns. If the array was previously shorter, then the
791 additional elements appended are set to NULL. If the array
792 was longer, then the excess elements are freed. S<C<av_fill(av, -1)>> is
793 the same as C<av_clear(av)>.
798 Perl_av_fill(pTHX_ AV *av, SSize_t fill)
802 PERL_ARGS_ASSERT_AV_FILL;
803 assert(SvTYPE(av) == SVt_PVAV);
807 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
808 SV *arg1 = sv_newmortal();
809 sv_setiv(arg1, (IV)(fill + 1));
810 Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(STORESIZE), G_DISCARD,
814 if (fill <= AvMAX(av)) {
815 SSize_t key = AvFILLp(av);
816 SV** const ary = AvARRAY(av);
820 SvREFCNT_dec(ary[key]);
831 mg_set(MUTABLE_SV(av));
834 (void)av_store(av,fill,NULL);
838 =for apidoc av_delete
840 Deletes the element indexed by C<key> from the array, makes the element mortal,
841 and returns it. If C<flags> equals C<G_DISCARD>, the element is freed and null
842 is returned. Perl equivalent: S<C<my $elem = delete($myarray[$idx]);>> for the
843 non-C<G_DISCARD> version and a void-context S<C<delete($myarray[$idx]);>> for the
844 C<G_DISCARD> version.
849 Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags)
853 PERL_ARGS_ASSERT_AV_DELETE;
854 assert(SvTYPE(av) == SVt_PVAV);
857 Perl_croak_no_modify();
859 if (SvRMAGICAL(av)) {
860 const MAGIC * const tied_magic
861 = mg_find((const SV *)av, PERL_MAGIC_tied);
862 if ((tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata))) {
865 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
868 svp = av_fetch(av, key, TRUE);
872 if (mg_find(sv, PERL_MAGIC_tiedelem)) {
873 sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */
882 key += AvFILL(av) + 1;
887 if (key > AvFILLp(av))
890 if (!AvREAL(av) && AvREIFY(av))
892 sv = AvARRAY(av)[key];
893 AvARRAY(av)[key] = NULL;
894 if (key == AvFILLp(av)) {
897 } while (--key >= 0 && !AvARRAY(av)[key]);
900 mg_set(MUTABLE_SV(av));
903 if (flags & G_DISCARD) {
914 =for apidoc av_exists
916 Returns true if the element indexed by C<key> has been initialized.
918 This relies on the fact that uninitialized array elements are set to
921 Perl equivalent: C<exists($myarray[$key])>.
926 Perl_av_exists(pTHX_ AV *av, SSize_t key)
928 PERL_ARGS_ASSERT_AV_EXISTS;
929 assert(SvTYPE(av) == SVt_PVAV);
931 if (SvRMAGICAL(av)) {
932 const MAGIC * const tied_magic
933 = mg_find((const SV *)av, PERL_MAGIC_tied);
934 const MAGIC * const regdata_magic
935 = mg_find((const SV *)av, PERL_MAGIC_regdata);
936 if (tied_magic || regdata_magic) {
938 /* Handle negative array indices 20020222 MJD */
940 if (!S_adjust_index(aTHX_ av, tied_magic, &key))
944 if(key >= 0 && regdata_magic) {
945 if (key <= AvFILL(av))
951 SV * const sv = sv_newmortal();
952 mg_copy(MUTABLE_SV(av), sv, 0, key);
953 mg = mg_find(sv, PERL_MAGIC_tiedelem);
955 magic_existspack(sv, mg);
957 I32 retbool = SvTRUE_nomg_NN(sv);
958 return cBOOL(retbool);
966 key += AvFILL(av) + 1;
971 if (key <= AvFILLp(av) && AvARRAY(av)[key])
980 S_get_aux_mg(pTHX_ AV *av) {
983 PERL_ARGS_ASSERT_GET_AUX_MG;
984 assert(SvTYPE(av) == SVt_PVAV);
986 mg = mg_find((const SV *)av, PERL_MAGIC_arylen_p);
989 mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p,
990 &PL_vtbl_arylen_p, 0, 0);
992 /* sv_magicext won't set this for us because we pass in a NULL obj */
993 mg->mg_flags |= MGf_REFCOUNTED;
999 Perl_av_arylen_p(pTHX_ AV *av) {
1000 MAGIC *const mg = get_aux_mg(av);
1002 PERL_ARGS_ASSERT_AV_ARYLEN_P;
1003 assert(SvTYPE(av) == SVt_PVAV);
1005 return &(mg->mg_obj);
1009 Perl_av_iter_p(pTHX_ AV *av) {
1010 MAGIC *const mg = get_aux_mg(av);
1012 PERL_ARGS_ASSERT_AV_ITER_P;
1013 assert(SvTYPE(av) == SVt_PVAV);
1015 #if IVSIZE == I32SIZE
1016 return (IV *)&(mg->mg_len);
1020 mg->mg_len = IVSIZE;
1022 mg->mg_ptr = (char *) temp;
1024 return (IV *)mg->mg_ptr;
1029 * ex: set ts=8 sts=4 sw=4 et: