summaryrefslogtreecommitdiff
path: root/pad.c
diff options
context:
space:
mode:
authorRichard Leach <richardleach@users.noreply.github.com>2021-04-07 23:29:44 +0100
committerHugo van der Sanden <hv@crypt.org>2021-05-22 16:14:46 +0100
commite92b9ddc13179b9220bebd7892b3c8bb1c2a93dc (patch)
treea87528d0cc6965ad40adf8c9139ab3cb7c88c076 /pad.c
parenta043512d92ca47f385148b776420a6438dc1d137 (diff)
downloadperl-e92b9ddc13179b9220bebd7892b3c8bb1c2a93dc.tar.gz
Perl_pad_push: directly allocate SV* array, remove av_store() calls
Diffstat (limited to 'pad.c')
-rw-r--r--pad.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/pad.c b/pad.c
index 4945268730..f74def114a 100644
--- a/pad.c
+++ b/pad.c
@@ -2396,6 +2396,10 @@ Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
PADNAME ** const names = PadnamelistARRAY((PADNAMELIST *)svp[0]);
AV *av;
+ Newxz( AvALLOC(newpad), ix + 1, SV *);
+ AvARRAY(newpad) = AvALLOC(newpad);
+ AvMAX(newpad) = AvFILLp(newpad) = ix;
+
for ( ;ix > 0; ix--) {
SV *sv;
if (names_fill >= ix && PadnameLEN(names[ix])) {
@@ -2424,10 +2428,10 @@ Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
sv = newSV(0);
SvPADTMP_on(sv);
}
- av_store(newpad, ix, sv);
+ AvARRAY(newpad)[ix] = sv;
}
av = newAV();
- av_store(newpad, 0, MUTABLE_SV(av));
+ AvARRAY(newpad)[0] = MUTABLE_SV(av);
AvREIFY_only(av);
padlist_store(padlist, depth, newpad);