summaryrefslogtreecommitdiff
path: root/av.c
diff options
context:
space:
mode:
authorRichard Leach <richardleach@users.noreply.github.com>2021-06-07 01:05:55 +0100
committerKarl Williamson <khw@cpan.org>2021-07-31 15:33:28 -0700
commit71ca71bc8b733c80f8f8099bb4673ee629da1353 (patch)
tree4c0b66c2d962fd9a407c021575281c06c6ef9a28 /av.c
parent541e9af01a41e04539c3aedd46abb741ef89fb9b (diff)
downloadperl-71ca71bc8b733c80f8f8099bb4673ee629da1353.tar.gz
av_create_and_push/unshift_one: faster create via newAV_alloc_xz
Diffstat (limited to 'av.c')
-rw-r--r--av.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/av.c b/av.c
index d2f0e0db45..cfc47a499c 100644
--- a/av.c
+++ b/av.c
@@ -638,9 +638,11 @@ Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
{
PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH;
- if (!*avp)
- *avp = newAV();
- av_push(*avp, val);
+ if (!*avp) {
+ *avp = newAV_alloc_xz(4);
+ AvARRAY(*avp)[ ++AvFILLp(*avp) ] = val;
+ } else
+ av_push(*avp, val);
}
/*
@@ -727,10 +729,14 @@ Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
{
PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE;
- if (!*avp)
- *avp = newAV();
- av_unshift(*avp, 1);
- return av_store(*avp, 0, val);
+ if (!*avp) {
+ *avp = newAV_alloc_xz(4);
+ AvARRAY(*avp)[ ++AvFILLp(*avp) ] = val;
+ return val;
+ } else {
+ av_unshift(*avp, 1);
+ return av_store(*avp, 0, val);
+ }
}
/*