newSVpvn_flags() does mortalization in place, instead of calling sv_2mortal()
gfx [Sat, 5 Sep 2009 07:26:42 +0000 (16:26 +0900)]
Signed-off-by: Yves Orton <demerphq@gemini.(none)>

sv.c

diff --git a/sv.c b/sv.c
index a53669a..cf9a6ff 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -7582,8 +7582,14 @@ Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags
     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
     new_SV(sv);
     sv_setpvn(sv,s,len);
-    SvFLAGS(sv) |= (flags & SVf_UTF8);
-    return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
+    SvFLAGS(sv) |= flags;
+
+    if(flags & SVs_TEMP){
+        EXTEND_MORTAL(1);
+        PL_tmps_stack[++PL_tmps_ix] = sv;
+    }
+
+    return sv;
 }
 
 /*