diff options
Diffstat (limited to 'pp_hot.c')
-rw-r--r-- | pp_hot.c | 10 |
1 files changed, 2 insertions, 8 deletions
@@ -993,10 +993,8 @@ PP(pp_aassign) sv = *lelem++; switch (SvTYPE(sv)) { case SVt_PVAV: - ary = MUTABLE_AV(sv); + ary = MUTABLE_AV(sv_2mortal(SvREFCNT_inc_simple_NN(sv))); magic = SvMAGICAL(ary) != 0; - ENTER; - SAVEFREESV(SvREFCNT_inc_simple_NN(sv)); av_clear(ary); av_extend(ary, lastrelem - relem); i = 0; @@ -1017,16 +1015,13 @@ PP(pp_aassign) } if (PL_delaymagic & DM_ARRAY_ISA) SvSETMAGIC(MUTABLE_SV(ary)); - LEAVE; break; case SVt_PVHV: { /* normal hash */ SV *tmpstr; SV** topelem = relem; - hash = MUTABLE_HV(sv); + hash = MUTABLE_HV(sv_2mortal(SvREFCNT_inc_simple_NN(sv))); magic = SvMAGICAL(hash) != 0; - ENTER; - SAVEFREESV(SvREFCNT_inc_simple_NN(sv)); hv_clear(hash); firsthashrelem = relem; @@ -1063,7 +1058,6 @@ PP(pp_aassign) do_oddball(hash, relem, firstrelem); relem++; } - LEAVE; } break; default: |