From 71ca71bc8b733c80f8f8099bb4673ee629da1353 Mon Sep 17 00:00:00 2001 From: Richard Leach Date: Mon, 7 Jun 2021 01:05:55 +0100 Subject: [PATCH] av_create_and_push/unshift_one: faster create via newAV_alloc_xz --- av.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/av.c b/av.c index d2f0e0db45d3..cfc47a499c12 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); + } } /*