diff options
author | Richard Leach <richardleach@users.noreply.github.com> | 2021-12-03 00:10:51 +0000 |
---|---|---|
committer | Paul Evans <leonerd@leonerd.org.uk> | 2021-12-04 11:49:42 +0000 |
commit | f7f919a02477385250997b98fe25f99657653150 (patch) | |
tree | e82e9cd32275eed214553785ba0c77d2a13e501b /pp.c | |
parent | 6ac93b496cce8882a9d5494bfedb84f4da7e0aee (diff) | |
download | perl-f7f919a02477385250997b98fe25f99657653150.tar.gz |
Misc microoptimizations when dealing with new SVs
In a few places, SVs can be created more efficiently or new SVs
can be assigned to more efficiently. Small changes included:
* Use sv_setpvn_fresh instead of sv_setpvn
* Use sv_mortalcopy_flags instead of sv_newmortal + sv_setsv_flags
* newSVsv_flags instead of newSV + sv_setsv_flags
* sv_newmortal instead of sv_2mortal(newSV(0))
* Remove a SvGROW(sv, 257) following a newSV(257)
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 9 |
1 files changed, 3 insertions, 6 deletions
@@ -180,8 +180,7 @@ S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict, } } if (SvFAKE(sv) && !(PL_op->op_private & OPpALLOW_FAKE)) { - SV *newsv = sv_newmortal(); - sv_setsv_flags(newsv, sv, 0); + SV *newsv = sv_mortalcopy_flags(sv, 0); SvFAKE_off(newsv); sv = newsv; } @@ -7006,9 +7005,7 @@ PP(pp_argelem) */ for (i = 0; i < argc; i++) { SV **svp = av_fetch(defav, ix + i, FALSE); - SV *newsv = newSV(0); - sv_setsv_flags(newsv, - svp ? *svp : &PL_sv_undef, + SV *newsv = newSVsv_flags(svp ? *svp : &PL_sv_undef, (SV_DO_COW_SVSETSV|SV_NOSTEAL)); if (!av_store(defav, ix + i, newsv)) SvREFCNT_dec_NN(newsv); @@ -7130,7 +7127,7 @@ S_find_runcv_name(void) if (!gv) return &PL_sv_no; - sv = sv_2mortal(newSV(0)); + sv = sv_newmortal(); gv_fullname4(sv, gv, NULL, TRUE); return sv; } |