diff options
author | Richard Leach <richardleach@users.noreply.github.com> | 2021-06-07 01:05:55 +0100 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2021-07-31 15:33:28 -0700 |
commit | 71ca71bc8b733c80f8f8099bb4673ee629da1353 (patch) | |
tree | 4c0b66c2d962fd9a407c021575281c06c6ef9a28 /av.c | |
parent | 541e9af01a41e04539c3aedd46abb741ef89fb9b (diff) | |
download | perl-71ca71bc8b733c80f8f8099bb4673ee629da1353.tar.gz |
av_create_and_push/unshift_one: faster create via newAV_alloc_xz
Diffstat (limited to 'av.c')
-rw-r--r-- | av.c | 20 |
1 files changed, 13 insertions, 7 deletions
@@ -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); + } } /* |