summaryrefslogtreecommitdiff
path: root/pad.c
diff options
context:
space:
mode:
authorRichard Leach <richardleach@users.noreply.github.com>2021-04-08 00:42:47 +0100
committerHugo van der Sanden <hv@crypt.org>2021-05-22 16:14:46 +0100
commit36f923e59e7f66d2c6cf187176f2cea3b7b0c43e (patch)
treeae49c9c6d7a611f63d9c2ca68bc90971ebdb6d0f /pad.c
parente92b9ddc13179b9220bebd7892b3c8bb1c2a93dc (diff)
downloadperl-36f923e59e7f66d2c6cf187176f2cea3b7b0c43e.tar.gz
Perl_pad_new: directly allocate SV* array, remove av_store() calls
Diffstat (limited to 'pad.c')
-rw-r--r--pad.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/pad.c b/pad.c
index f74def114a..837055262b 100644
--- a/pad.c
+++ b/pad.c
@@ -220,17 +220,24 @@ Perl_pad_new(pTHX_ int flags)
Newxz(padlist, 1, PADLIST);
pad = newAV();
+ Newxz(AvALLOC(pad), 4, SV *); /* Originally sized to
+ match av_extend default */
+ AvARRAY(pad) = AvALLOC(pad);
+ AvMAX(pad) = 3;
+ AvFILLp(pad) = 0; /* @_ or NULL, set below. */
if (flags & padnew_CLONE) {
AV * const a0 = newAV(); /* will be @_ */
- av_store(pad, 0, MUTABLE_SV(a0));
+ AvARRAY(pad)[0] = MUTABLE_SV(a0);
AvREIFY_only(a0);
PadnamelistREFCNT(padname = PL_comppad_name)++;
}
else {
padlist->xpadl_id = PL_padlist_generation++;
- av_store(pad, 0, NULL);
+ /* Set implicitly through use of Newxz above
+ AvARRAY(pad)[0] = NULL;
+ */
padname = newPADNAMELIST(0);
padnamelist_store(padname, 0, &PL_padname_undef);
}