From c3d39da9a3ff8ff8516f5b9f372f478861d5d1da Mon Sep 17 00:00:00 2001 From: Richard Leach Date: Thu, 27 May 2021 00:40:27 +0100 Subject: [PATCH] pp_match: newSVpvn_flags now more efficient than sv_newmortal + sv_setpvn. --- pp_hot.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pp_hot.c b/pp_hot.c index 3348afedf166..4da921076bf2 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -3105,7 +3105,6 @@ PP(pp_match) EXTEND(SP, nparens + i); EXTEND_MORTAL(nparens + i); for (i = !i; i <= nparens; i++) { - PUSHs(sv_newmortal()); if (LIKELY((RXp_OFFS(prog)[i].start != -1) && RXp_OFFS(prog)[i].end != -1 )) { @@ -3120,9 +3119,13 @@ PP(pp_match) "start=%ld, end=%ld, s=%p, strend=%p, len=%" UVuf, (long) i, (long) RXp_OFFS(prog)[i].start, (long)RXp_OFFS(prog)[i].end, s, strend, (UV) len); - sv_setpvn(*SP, s, len); - if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len)) - SvUTF8_on(*SP); + PUSHs(newSVpvn_flags(s, len, + (DO_UTF8(TARG) && is_utf8_string((U8*)s, len)) + ? SVf_UTF8|SVs_TEMP + : SVs_TEMP) + ); + } else { + PUSHs(sv_newmortal()); } } if (global) {