summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorRichard Leach <richardleach@users.noreply.github.com>2021-12-03 00:10:51 +0000
committerPaul Evans <leonerd@leonerd.org.uk>2021-12-04 11:49:42 +0000
commitf7f919a02477385250997b98fe25f99657653150 (patch)
treee82e9cd32275eed214553785ba0c77d2a13e501b /pp.c
parent6ac93b496cce8882a9d5494bfedb84f4da7e0aee (diff)
downloadperl-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.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/pp.c b/pp.c
index 8d2cb96c1e..202cac6c1c 100644
--- a/pp.c
+++ b/pp.c
@@ -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;
}