(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;
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);
gp->gp_sv = newSV(0);
}
#endif
- GvGP(gv) = gp;
+ GvGP_set(gv,gp);
}
else {
gp_ref(GvGP(gv));
*(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_set(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;