diff options
Diffstat (limited to 'scope.c')
-rw-r--r-- | scope.c | 15 |
1 files changed, 3 insertions, 12 deletions
@@ -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,11 +845,10 @@ 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)) && HvENAME_get(hv)) mro_method_changed_in(hv); |