summaryrefslogtreecommitdiff
path: root/pp_hot.c
diff options
context:
space:
mode:
Diffstat (limited to 'pp_hot.c')
-rw-r--r--pp_hot.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/pp_hot.c b/pp_hot.c
index ff834a924e..add940049b 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -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: