summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorgfx <gfuji@cpan.org>2009-09-05 16:26:42 +0900
committerYves Orton <demerphq@gemini.(none)>2009-09-05 11:54:21 +0200
commit6dfeccca7d595e9c94766acdd058cec56fa67315 (patch)
tree614b6d713cb3359716af8611b62ea46658af5a2d /sv.c
parent37bea34e994ad105df9af2a09b8df68963861164 (diff)
downloadperl-6dfeccca7d595e9c94766acdd058cec56fa67315.tar.gz
newSVpvn_flags() does mortalization in place, instead of calling sv_2mortal()
Signed-off-by: Yves Orton <demerphq@gemini.(none)>
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sv.c b/sv.c
index a53669a324..cf9a6ffe80 100644
--- 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;
}
/*