X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sv.c;h=66b4d8e8752c26d3a9deed5cfb3e17f6fafc5561;hb=b37c2d43c8bccbefe3985273e9661833102148d0;hp=6d550d9be822bd044fffba8f00c8da0c22f16f25;hpb=f7877b281b40407827939f44ea94226de573cdbc;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sv.c b/sv.c index 6d550d9..66b4d8e 100644 --- a/sv.c +++ b/sv.c @@ -3191,6 +3191,8 @@ S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype) SvCUR_set(dstr, 0); } sv_upgrade(dstr, SVt_PVGV); + (void)SvOK_off(dstr); + SvSCREAM_on(dstr); } GvSTASH(dstr) = GvSTASH(sstr); if (GvSTASH(dstr)) @@ -3209,8 +3211,8 @@ S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype) gp_free((GV*)dstr); SvSCREAM_off(dstr); (void)SvOK_off(dstr); - GvINTRO_off(dstr); /* one-shot flag */ SvSCREAM_on(dstr); + GvINTRO_off(dstr); /* one-shot flag */ GvGP(dstr) = gp_ref(GvGP(sstr)); if (SvTAINTED(sstr)) SvTAINT(dstr); @@ -3326,8 +3328,7 @@ S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) { } break; } - if (dref) - SvREFCNT_dec(dref); + SvREFCNT_dec(dref); if (SvTAINTED(sstr)) SvTAINT(dstr); return; @@ -4336,7 +4337,7 @@ Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable, mg->mg_obj = obj; } else { - mg->mg_obj = SvREFCNT_inc(obj); + mg->mg_obj = SvREFCNT_inc_simple(obj); mg->mg_flags |= MGf_REFCOUNTED; } @@ -4360,7 +4361,7 @@ Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable, if (namlen > 0) mg->mg_ptr = savepvn(name, namlen); else if (namlen == HEf_SVKEY) - mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name); + mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name); else mg->mg_ptr = (char *) name; } @@ -4666,7 +4667,7 @@ Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv) } else { av = newAV(); AvREAL_off(av); - SvREFCNT_inc(av); + SvREFCNT_inc_simple_void(av); } *avp = av; } @@ -5110,7 +5111,7 @@ Perl_sv_clear(pTHX_ register SV *sv) case SVt_PV: case SVt_RV: if (SvROK(sv)) { - SV *target = SvRV(sv); + SV * const target = SvRV(sv); if (SvWEAKREF(sv)) sv_del_backref(target, sv); else @@ -5764,9 +5765,7 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) if (cur1 == cur2) eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1); - if (svrecode) - SvREFCNT_dec(svrecode); - + SvREFCNT_dec(svrecode); if (tpv) Safefree(tpv); @@ -5849,9 +5848,7 @@ Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2) } } - if (svrecode) - SvREFCNT_dec(svrecode); - + SvREFCNT_dec(svrecode); if (tpv) Safefree(tpv); @@ -6969,7 +6966,7 @@ SV * Perl_newRV(pTHX_ SV *tmpRef) { dVAR; - return newRV_noinc(SvREFCNT_inc(tmpRef)); + return newRV_noinc(SvREFCNT_inc_simple(tmpRef)); } /* @@ -7663,7 +7660,7 @@ Perl_sv_bless(pTHX_ SV *sv, HV *stash) if (SvTYPE(tmpRef) != SVt_PVIO) ++PL_sv_objcount; SvUPGRADE(tmpRef, SVt_PVMG); - SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash)); + SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash)); if (Gv_AMG(stash)) SvAMAGIC_on(sv); @@ -7687,7 +7684,7 @@ S_sv_unglob(pTHX_ SV *sv) { dVAR; void *xpvmg; - SV *temp = sv_newmortal(); + SV * const temp = sv_newmortal(); assert(SvTYPE(sv) == SVt_PVGV); SvFAKE_off(sv); @@ -7700,9 +7697,9 @@ S_sv_unglob(pTHX_ SV *sv) sv_del_backref((SV*)GvSTASH(sv), sv); GvSTASH(sv) = NULL; } - SvSCREAM_off(sv); - Safefree(GvNAME(sv)); GvMULTI_off(sv); + Safefree(GvNAME(sv)); + SvSCREAM_off(sv); /* need to keep SvANY(sv) in the right arena */ xpvmg = new_XPVMG(); @@ -9371,6 +9368,7 @@ GP * Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param) { GP *ret; + if (!gp) return (GP*)NULL; /* look for it in the table first */ @@ -11150,7 +11148,7 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, proto_perl->Ttmps_stack[i]); if (nsv && !SvREFCNT(nsv)) { EXTEND_MORTAL(1); - PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc(nsv); + PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv); } } } @@ -11298,7 +11296,7 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, /* orphaned? eg threads->new inside BEGIN or use */ if (PL_compcv && ! SvREFCNT(PL_compcv)) { - (void)SvREFCNT_inc(PL_compcv); + SvREFCNT_inc_simple_void(PL_compcv); SAVEFREESV(PL_compcv); }