X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/20439bc77dfeec46d94a15cf108446039e26c995..93136d17f9881a8e1aebaec99f2febb8e56aefa3:/scope.c diff --git a/scope.c b/scope.c index 9c1831c..fb93db0 100644 --- a/scope.c +++ b/scope.c @@ -187,7 +187,7 @@ S_save_scalar_at(pTHX_ SV **sptr, const U32 flags) (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; } if (!(flags & SAVEf_KEEPOLDELEM)) - mg_localize(osv, sv, (flags & SAVEf_SETMAGIC) != 0); + mg_localize(osv, sv, cBOOL(flags & SAVEf_SETMAGIC)); } return sv; @@ -279,15 +279,7 @@ Perl_save_gp(pTHX_ GV *gv, I32 empty) PERL_ARGS_ASSERT_SAVE_GP; - SSCHECK(4); - SSPUSHINT(SvFAKE(gv)); - SSPUSHPTR(GvGP(gv)); - SSPUSHPTR(SvREFCNT_inc(gv)); - SSPUSHUV(SAVEt_GP); - - /* Don't let the localized GV coerce into non-glob, otherwise we would - * not be able to restore GP upon leave from context if that happened */ - SvFAKE_off(gv); + save_pushptrptr(SvREFCNT_inc(gv), GvGP(gv), SAVEt_GP); if (empty) { GP *gp = Perl_newGP(aTHX_ gv); @@ -853,13 +845,12 @@ Perl_leave_scope(pTHX_ I32 base) *(AV**)ptr = MUTABLE_AV(SSPOPPTR); break; case SAVEt_GP: /* scalar reference */ + ptr = SSPOPPTR; gv = MUTABLE_GV(SSPOPPTR); gp_free(gv); - GvGP(gv) = (GP*)SSPOPPTR; - if (SSPOPINT) - SvFAKE_on(gv); + GvGP(gv) = (GP*)ptr; /* putting a method back into circulation ("local")*/ - if (GvCVu(gv) && (hv=GvSTASH(gv)) && HvNAME_get(hv)) + if (GvCVu(gv) && (hv=GvSTASH(gv)) && HvENAME_get(hv)) mro_method_changed_in(hv); SvREFCNT_dec(gv); break; @@ -867,6 +858,10 @@ Perl_leave_scope(pTHX_ I32 base) ptr = SSPOPPTR; SvREFCNT_dec(MUTABLE_SV(ptr)); break; + case SAVEt_FREECOPHH: + ptr = SSPOPPTR; + cophh_free((COPHH *)ptr); + break; case SAVEt_MORTALIZESV: ptr = SSPOPPTR; sv_2mortal(MUTABLE_SV(ptr));