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)
32 PERL_ARGS_ASSERT_AV_REIFY;
33 assert(SvTYPE(av) == SVt_PVAV);
38 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
39 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array");
42 while (key > AvFILLp(av) + 1)
43 AvARRAY(av)[--key] = &PL_sv_undef;
45 SV * const sv = AvARRAY(av)[--key];
47 if (sv != &PL_sv_undef)
48 SvREFCNT_inc_simple_void_NN(sv);
50 key = AvARRAY(av) - AvALLOC(av);
52 AvALLOC(av)[--key] = &PL_sv_undef;
60 Pre-extend an array. The C<key> is the index to which the array should be
67 Perl_av_extend(pTHX_ AV *av, I32 key)
72 PERL_ARGS_ASSERT_AV_EXTEND;
73 assert(SvTYPE(av) == SVt_PVAV);
75 mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied);
80 PUSHSTACKi(PERLSI_MAGIC);
83 PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
86 call_method("EXTEND", G_SCALAR|G_DISCARD);
92 if (key > AvMAX(av)) {
97 if (AvALLOC(av) != AvARRAY(av)) {
98 ary = AvALLOC(av) + AvFILLp(av) + 1;
99 tmp = AvARRAY(av) - AvALLOC(av);
100 Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
102 AvARRAY(av) = AvALLOC(av);
105 ary[--tmp] = &PL_sv_undef;
107 if (key > AvMAX(av) - 10) {
108 newmax = key + AvMAX(av);
113 #ifdef PERL_MALLOC_WRAP
114 static const char oom_array_extend[] =
115 "Out of memory during array extend"; /* Duplicated in pp_hot.c */
119 #if !defined(STRANGE_MALLOC) && !defined(MYMALLOC)
124 #ifdef Perl_safesysmalloc_size
125 /* Whilst it would be quite possible to move this logic around
126 (as I did in the SV code), so as to set AvMAX(av) early,
127 based on calling Perl_safesysmalloc_size() immediately after
128 allocation, I'm not convinced that it is a great idea here.
129 In an array we have to loop round setting everything to
130 &PL_sv_undef, which means writing to memory, potentially lots
131 of it, whereas for the SV buffer case we don't touch the
132 "bonus" memory. So there there is no cost in telling the
133 world about it, whereas here we have to do work before we can
134 tell the world about it, and that work involves writing to
135 memory that might never be read. So, I feel, better to keep
136 the current lazy system of only writing to it if our caller
137 has a need for more space. NWC */
138 newmax = Perl_safesysmalloc_size((void*)AvALLOC(av)) /
139 sizeof(const SV *) - 1;
144 newmax = key + AvMAX(av) / 5;
146 MEM_WRAP_CHECK_1(newmax+1, SV*, oom_array_extend);
147 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
148 Renew(AvALLOC(av),newmax+1, SV*);
150 bytes = (newmax + 1) * sizeof(const SV *);
151 #define MALLOC_OVERHEAD 16
152 itmp = MALLOC_OVERHEAD;
153 while ((MEM_SIZE)(itmp - MALLOC_OVERHEAD) < bytes)
155 itmp -= MALLOC_OVERHEAD;
156 itmp /= sizeof(const SV *);
157 assert(itmp > newmax);
159 assert(newmax >= AvMAX(av));
160 Newx(ary, newmax+1, SV*);
161 Copy(AvALLOC(av), ary, AvMAX(av)+1, SV*);
163 offer_nice_chunk(AvALLOC(av),
164 (AvMAX(av)+1) * sizeof(const SV *));
166 Safefree(AvALLOC(av));
169 #ifdef Perl_safesysmalloc_size
172 ary = AvALLOC(av) + AvMAX(av) + 1;
173 tmp = newmax - AvMAX(av);
174 if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */
175 PL_stack_sp = AvALLOC(av) + (PL_stack_sp - PL_stack_base);
176 PL_stack_base = AvALLOC(av);
177 PL_stack_max = PL_stack_base + newmax;
181 newmax = key < 3 ? 3 : key;
182 MEM_WRAP_CHECK_1(newmax+1, SV*, oom_array_extend);
183 Newx(AvALLOC(av), newmax+1, SV*);
184 ary = AvALLOC(av) + 1;
186 AvALLOC(av)[0] = &PL_sv_undef; /* For the stacks */
190 ary[--tmp] = &PL_sv_undef;
193 AvARRAY(av) = AvALLOC(av);
202 Returns the SV at the specified index in the array. The C<key> is the
203 index. If C<lval> is set then the fetch will be part of a store. Check
204 that the return value is non-null before dereferencing it to a C<SV*>.
206 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
207 more information on how to use this function on tied arrays.
213 Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval)
217 PERL_ARGS_ASSERT_AV_FETCH;
218 assert(SvTYPE(av) == SVt_PVAV);
220 if (SvRMAGICAL(av)) {
221 const MAGIC * const tied_magic
222 = mg_find((const SV *)av, PERL_MAGIC_tied);
223 if (tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata)) {
226 I32 adjust_index = 1;
228 /* Handle negative array indices 20020222 MJD */
229 SV * const * const negative_indices_glob =
230 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
232 NEGATIVE_INDICES_VAR, 16, 0);
234 if (negative_indices_glob && SvTRUE(GvSV(*negative_indices_glob)))
239 key += AvFILL(av) + 1;
246 sv_upgrade(sv, SVt_PVLV);
247 mg_copy(MUTABLE_SV(av), sv, 0, key);
248 if (!tied_magic) /* for regdata, force leavesub to make copies */
251 LvTARG(sv) = sv; /* fake (SV**) */
252 return &(LvTARG(sv));
257 key += AvFILL(av) + 1;
262 if (key > AvFILLp(av)) {
265 return av_store(av,key,newSV(0));
267 if (AvARRAY(av)[key] == &PL_sv_undef) {
270 return av_store(av,key,newSV(0));
274 && (!AvARRAY(av)[key] /* eg. @_ could have freed elts */
275 || SvIS_FREED(AvARRAY(av)[key]))) {
276 AvARRAY(av)[key] = &PL_sv_undef; /* 1/2 reify */
279 return &AvARRAY(av)[key];
285 Stores an SV in an array. The array index is specified as C<key>. The
286 return value will be NULL if the operation failed or if the value did not
287 need to be actually stored within the array (as in the case of tied
288 arrays). Otherwise it can be dereferenced to get the original C<SV*>. Note
289 that the caller is responsible for suitably incrementing the reference
290 count of C<val> before the call, and decrementing it if the function
293 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
294 more information on how to use this function on tied arrays.
300 Perl_av_store(pTHX_ register AV *av, I32 key, SV *val)
305 PERL_ARGS_ASSERT_AV_STORE;
306 assert(SvTYPE(av) == SVt_PVAV);
308 /* S_regclass relies on being able to pass in a NULL sv
309 (unicode_alternate may be NULL).
315 if (SvRMAGICAL(av)) {
316 const MAGIC * const tied_magic = mg_find((const SV *)av, PERL_MAGIC_tied);
318 /* Handle negative array indices 20020222 MJD */
320 bool adjust_index = 1;
321 SV * const * const negative_indices_glob =
322 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
324 NEGATIVE_INDICES_VAR, 16, 0);
325 if (negative_indices_glob
326 && SvTRUE(GvSV(*negative_indices_glob)))
329 key += AvFILL(av) + 1;
334 if (val != &PL_sv_undef) {
335 mg_copy(MUTABLE_SV(av), val, 0, key);
343 key += AvFILL(av) + 1;
348 if (SvREADONLY(av) && key >= AvFILL(av))
349 Perl_croak(aTHX_ "%s", PL_no_modify);
351 if (!AvREAL(av) && AvREIFY(av))
356 if (AvFILLp(av) < key) {
358 if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
359 PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */
361 ary[++AvFILLp(av)] = &PL_sv_undef;
362 } while (AvFILLp(av) < key);
367 SvREFCNT_dec(ary[key]);
369 if (SvSMAGICAL(av)) {
370 const MAGIC* const mg = SvMAGIC(av);
371 if (val != &PL_sv_undef) {
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;
377 mg_set(MUTABLE_SV(av));
385 Creates a new AV and populates it with a list of SVs. The SVs are copied
386 into the array, so they may be freed after the call to av_make. The new AV
387 will have a reference count of 1.
393 Perl_av_make(pTHX_ register I32 size, register SV **strp)
395 register AV * const av = MUTABLE_AV(newSV_type(SVt_PVAV));
396 /* sv_upgrade does AvREAL_only() */
397 PERL_ARGS_ASSERT_AV_MAKE;
398 assert(SvTYPE(av) == SVt_PVAV);
400 if (size) { /* "defined" was returning undef for size==0 anyway. */
406 AvFILLp(av) = AvMAX(av) = size - 1;
407 for (i = 0; i < size; i++) {
410 /* Don't let sv_setsv swipe, since our source array might
411 have multiple references to the same temp scalar (e.g.
412 from a list slice) */
415 sv_setsv_flags(ary[i], *strp,
416 SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
426 Clears an array, making it empty. Does not free the memory used by the
433 Perl_av_clear(pTHX_ register AV *av)
438 PERL_ARGS_ASSERT_AV_CLEAR;
439 assert(SvTYPE(av) == SVt_PVAV);
442 if (SvREFCNT(av) == 0) {
443 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array");
448 Perl_croak(aTHX_ "%s", PL_no_modify);
450 /* Give any tie a chance to cleanup first */
451 if (SvRMAGICAL(av)) {
452 const MAGIC* const mg = SvMAGIC(av);
453 if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa)
454 PL_delaymagic |= DM_ARRAY;
456 mg_clear(MUTABLE_SV(av));
463 SV** const ary = AvARRAY(av);
464 I32 index = AvFILLp(av) + 1;
466 SV * const sv = ary[--index];
467 /* undef the slot before freeing the value, because a
468 * destructor might try to modify this array */
469 ary[index] = &PL_sv_undef;
473 extra = AvARRAY(av) - AvALLOC(av);
476 AvARRAY(av) = AvALLOC(av);
485 Undefines the array. Frees the memory used by the array itself.
491 Perl_av_undef(pTHX_ register AV *av)
493 PERL_ARGS_ASSERT_AV_UNDEF;
494 assert(SvTYPE(av) == SVt_PVAV);
496 /* Give any tie a chance to cleanup first */
497 if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied))
501 register I32 key = AvFILLp(av) + 1;
503 SvREFCNT_dec(AvARRAY(av)[--key]);
506 Safefree(AvALLOC(av));
509 AvMAX(av) = AvFILLp(av) = -1;
511 if(SvRMAGICAL(av)) mg_clear(MUTABLE_SV(av));
516 =for apidoc av_create_and_push
518 Push an SV onto the end of the array, creating the array if necessary.
519 A small internal helper function to remove a commonly duplicated idiom.
525 Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
527 PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH;
537 Pushes an SV onto the end of the array. The array will grow automatically
538 to accommodate the addition. Like C<av_store>, this takes ownership of one
545 Perl_av_push(pTHX_ register AV *av, SV *val)
550 PERL_ARGS_ASSERT_AV_PUSH;
551 assert(SvTYPE(av) == SVt_PVAV);
554 Perl_croak(aTHX_ "%s", PL_no_modify);
556 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
558 PUSHSTACKi(PERLSI_MAGIC);
561 PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
565 call_method("PUSH", G_SCALAR|G_DISCARD);
570 av_store(av,AvFILLp(av)+1,val);
576 Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
583 Perl_av_pop(pTHX_ register AV *av)
589 PERL_ARGS_ASSERT_AV_POP;
590 assert(SvTYPE(av) == SVt_PVAV);
593 Perl_croak(aTHX_ "%s", PL_no_modify);
594 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
596 PUSHSTACKi(PERLSI_MAGIC);
598 XPUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
601 if (call_method("POP", G_SCALAR)) {
602 retval = newSVsv(*PL_stack_sp--);
604 retval = &PL_sv_undef;
612 retval = AvARRAY(av)[AvFILLp(av)];
613 AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef;
615 mg_set(MUTABLE_SV(av));
621 =for apidoc av_create_and_unshift_one
623 Unshifts an SV onto the beginning of the array, creating the array if
625 A small internal helper function to remove a commonly duplicated idiom.
631 Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
633 PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE;
638 return av_store(*avp, 0, val);
642 =for apidoc av_unshift
644 Unshift the given number of C<undef> values onto the beginning of the
645 array. The array will grow automatically to accommodate the addition. You
646 must then use C<av_store> to assign values to these new elements.
652 Perl_av_unshift(pTHX_ register AV *av, register I32 num)
658 PERL_ARGS_ASSERT_AV_UNSHIFT;
659 assert(SvTYPE(av) == SVt_PVAV);
662 Perl_croak(aTHX_ "%s", PL_no_modify);
664 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
666 PUSHSTACKi(PERLSI_MAGIC);
669 PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
675 call_method("UNSHIFT", G_SCALAR|G_DISCARD);
683 if (!AvREAL(av) && AvREIFY(av))
685 i = AvARRAY(av) - AvALLOC(av);
693 AvARRAY(av) = AvARRAY(av) - i;
697 const I32 i = AvFILLp(av);
698 /* Create extra elements */
699 const I32 slide = i > 0 ? i : 0;
701 av_extend(av, i + num);
704 Move(ary, ary + num, i + 1, SV*);
706 ary[--num] = &PL_sv_undef;
708 /* Make extra elements into a buffer */
710 AvFILLp(av) -= slide;
711 AvARRAY(av) = AvARRAY(av) + slide;
718 Shifts an SV off the beginning of the array. Returns C<&PL_sv_undef> if the
725 Perl_av_shift(pTHX_ register AV *av)
731 PERL_ARGS_ASSERT_AV_SHIFT;
732 assert(SvTYPE(av) == SVt_PVAV);
735 Perl_croak(aTHX_ "%s", PL_no_modify);
736 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
738 PUSHSTACKi(PERLSI_MAGIC);
740 XPUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
743 if (call_method("SHIFT", G_SCALAR)) {
744 retval = newSVsv(*PL_stack_sp--);
746 retval = &PL_sv_undef;
754 retval = *AvARRAY(av);
756 *AvARRAY(av) = &PL_sv_undef;
757 AvARRAY(av) = AvARRAY(av) + 1;
761 mg_set(MUTABLE_SV(av));
768 Returns the highest index in the array. The number of elements in the
769 array is C<av_len(av) + 1>. Returns -1 if the array is empty.
775 Perl_av_len(pTHX_ AV *av)
777 PERL_ARGS_ASSERT_AV_LEN;
778 assert(SvTYPE(av) == SVt_PVAV);
786 Set the highest index in the array to the given number, equivalent to
787 Perl's C<$#array = $fill;>.
789 The number of elements in the an array will be C<fill + 1> after
790 av_fill() returns. If the array was previously shorter then the
791 additional elements appended are set to C<PL_sv_undef>. If the array
792 was longer, then the excess elements are freed. C<av_fill(av, -1)> is
793 the same as C<av_clear(av)>.
798 Perl_av_fill(pTHX_ register AV *av, I32 fill)
803 PERL_ARGS_ASSERT_AV_FILL;
804 assert(SvTYPE(av) == SVt_PVAV);
808 if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
812 PUSHSTACKi(PERLSI_MAGIC);
815 PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
818 call_method("STORESIZE", G_SCALAR|G_DISCARD);
824 if (fill <= AvMAX(av)) {
825 I32 key = AvFILLp(av);
826 SV** const ary = AvARRAY(av);
830 SvREFCNT_dec(ary[key]);
831 ary[key--] = &PL_sv_undef;
836 ary[++key] = &PL_sv_undef;
841 mg_set(MUTABLE_SV(av));
844 (void)av_store(av,fill,&PL_sv_undef);
848 =for apidoc av_delete
850 Deletes the element indexed by C<key> from the array. Returns the
851 deleted element. If C<flags> equals C<G_DISCARD>, the element is freed
852 and null is returned.
857 Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags)
862 PERL_ARGS_ASSERT_AV_DELETE;
863 assert(SvTYPE(av) == SVt_PVAV);
866 Perl_croak(aTHX_ "%s", PL_no_modify);
868 if (SvRMAGICAL(av)) {
869 const MAGIC * const tied_magic
870 = mg_find((const SV *)av, PERL_MAGIC_tied);
871 if ((tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata))) {
872 /* Handle negative array indices 20020222 MJD */
875 unsigned adjust_index = 1;
877 SV * const * const negative_indices_glob =
878 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
880 NEGATIVE_INDICES_VAR, 16, 0);
881 if (negative_indices_glob
882 && SvTRUE(GvSV(*negative_indices_glob)))
886 key += AvFILL(av) + 1;
891 svp = av_fetch(av, key, TRUE);
895 if (mg_find(sv, PERL_MAGIC_tiedelem)) {
896 sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */
905 key += AvFILL(av) + 1;
910 if (key > AvFILLp(av))
913 if (!AvREAL(av) && AvREIFY(av))
915 sv = AvARRAY(av)[key];
916 if (key == AvFILLp(av)) {
917 AvARRAY(av)[key] = &PL_sv_undef;
920 } while (--key >= 0 && AvARRAY(av)[key] == &PL_sv_undef);
923 AvARRAY(av)[key] = &PL_sv_undef;
925 mg_set(MUTABLE_SV(av));
927 if (flags & G_DISCARD) {
937 =for apidoc av_exists
939 Returns true if the element indexed by C<key> has been initialized.
941 This relies on the fact that uninitialized array elements are set to
947 Perl_av_exists(pTHX_ AV *av, I32 key)
950 PERL_ARGS_ASSERT_AV_EXISTS;
951 assert(SvTYPE(av) == SVt_PVAV);
953 if (SvRMAGICAL(av)) {
954 const MAGIC * const tied_magic
955 = mg_find((const SV *)av, PERL_MAGIC_tied);
956 if (tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata)) {
957 SV * const sv = sv_newmortal();
959 /* Handle negative array indices 20020222 MJD */
961 unsigned adjust_index = 1;
963 SV * const * const negative_indices_glob =
964 hv_fetch(SvSTASH(SvRV(SvTIED_obj(MUTABLE_SV(av),
966 NEGATIVE_INDICES_VAR, 16, 0);
967 if (negative_indices_glob
968 && SvTRUE(GvSV(*negative_indices_glob)))
972 key += AvFILL(av) + 1;
978 mg_copy(MUTABLE_SV(av), sv, 0, key);
979 mg = mg_find(sv, PERL_MAGIC_tiedelem);
981 magic_existspack(sv, mg);
982 return cBOOL(SvTRUE(sv));
989 key += AvFILL(av) + 1;
994 if (key <= AvFILLp(av) && AvARRAY(av)[key] != &PL_sv_undef
1004 S_get_aux_mg(pTHX_ AV *av) {
1008 PERL_ARGS_ASSERT_GET_AUX_MG;
1009 assert(SvTYPE(av) == SVt_PVAV);
1011 mg = mg_find((const SV *)av, PERL_MAGIC_arylen_p);
1014 mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p,
1015 &PL_vtbl_arylen_p, 0, 0);
1017 /* sv_magicext won't set this for us because we pass in a NULL obj */
1018 mg->mg_flags |= MGf_REFCOUNTED;
1024 Perl_av_arylen_p(pTHX_ AV *av) {
1025 MAGIC *const mg = get_aux_mg(av);
1027 PERL_ARGS_ASSERT_AV_ARYLEN_P;
1028 assert(SvTYPE(av) == SVt_PVAV);
1030 return &(mg->mg_obj);
1034 Perl_av_iter_p(pTHX_ AV *av) {
1035 MAGIC *const mg = get_aux_mg(av);
1037 PERL_ARGS_ASSERT_AV_ITER_P;
1038 assert(SvTYPE(av) == SVt_PVAV);
1040 #if IVSIZE == I32SIZE
1041 return (IV *)&(mg->mg_len);
1045 mg->mg_len = IVSIZE;
1047 mg->mg_ptr = (char *) temp;
1049 return (IV *)mg->mg_ptr;
1055 * c-indentation-style: bsd
1057 * indent-tabs-mode: t
1060 * ex: set ts=8 sts=4 sw=4 noet: