diff options
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); + } } /* |