SV * const osv = *sptr;
register SV * const sv = *sptr = newSV(0);
+#ifdef PERL_MAD
+ /* FIXME for MAD - this is causing ext/Safe/t/safeops.t to abort. */
+ if (PL_formfeed && sv == PL_formfeed)
+ abort();
+#endif
+
if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv) && SvTYPE(osv) != SVt_PVGV) {
if (SvGMAGICAL(osv)) {
const bool oldtainted = PL_tainted;
Perl_save_scalar(pTHX_ GV *gv)
{
dVAR;
- SV ** const sptr = &GvSV(gv);
+ SV ** const sptr = &GvSVn(gv);
+#ifdef PERL_MAD
+ if (PL_formfeed && *sptr == PL_formfeed)
+ abort();
+#endif
PL_localizing = 1;
SvGETMAGIC(*sptr);
PL_localizing = 0;
SSCHECK(3);
- SSPUSHPTR(SvREFCNT_inc(gv));
+ SSPUSHPTR(SvREFCNT_inc_simple(gv));
SSPUSHPTR(SvREFCNT_inc(*sptr));
SSPUSHINT(SAVEt_SV);
return save_scalar_at(sptr);
Perl_save_generic_svref(pTHX_ SV **sptr)
{
dVAR;
+#ifdef PERL_MAD
+ if (PL_formfeed && *sptr == PL_formfeed)
+ abort();
+#endif
SSCHECK(3);
SSPUSHPTR(sptr);
SSPUSHPTR(SvREFCNT_inc(*sptr));
Perl_save_gp(pTHX_ GV *gv, I32 empty)
{
dVAR;
- SSGROW(6);
- SSPUSHIV((IV)SvLEN(gv));
- SvLEN_set(gv, 0); /* forget that anything was allocated here */
- SSPUSHIV((IV)SvCUR(gv));
- SSPUSHPTR(SvPVX_const(gv));
- SvPOK_off(gv);
+ SSGROW(3);
SSPUSHPTR(SvREFCNT_inc(gv));
SSPUSHPTR(GvGP(gv));
SSPUSHINT(SAVEt_GP);
IoFLAGS(gp->gp_io) |= IOf_ARGV|IOf_START;
}
GvGP(gv) = gp_ref(gp);
+#ifndef PERL_DONT_CREATE_GVSV
GvSV(gv) = newSV(0);
+#endif
GvLINE(gv) = CopLINE(PL_curcop);
/* XXX Ideally this cast would be replaced with a change to const char*
in the struct. */
SSPUSHPTR(oav);
SSPUSHINT(SAVEt_AV);
- GvAV(gv) = Null(AV*);
+ GvAV(gv) = NULL;
av = GvAVn(gv);
if (SvMAGIC(oav))
mg_localize((SV*)oav, (SV*)av);
SSPUSHPTR(ohv = GvHVn(gv));
SSPUSHINT(SAVEt_HV);
- GvHV(gv) = Null(HV*);
+ GvHV(gv) = NULL;
hv = GvHVn(gv);
if (SvMAGIC(ohv))
mg_localize((SV*)ohv, (SV*)hv);
dVAR;
register SV * const sv = newSVsv(item);
+#ifdef PERL_MAD
+ if (PL_formfeed && item == PL_formfeed)
+ abort();
+#endif
+
SSCHECK(3);
SSPUSHPTR(item); /* remember the pointer */
SSPUSHPTR(sv); /* remember the value */
SSCHECK(4);
SSPUSHINT(klen);
SSPUSHPTR(key);
- SSPUSHPTR(SvREFCNT_inc(hv));
+ SSPUSHPTR(SvREFCNT_inc_simple(hv));
SSPUSHINT(SAVEt_DELETE);
}
}
void
-Perl_save_aelem(pTHX_ const AV *av, I32 idx, SV **sptr)
+Perl_save_aelem(pTHX_ AV *av, I32 idx, SV **sptr)
{
dVAR;
SV *sv;
SvGETMAGIC(*sptr);
SSCHECK(4);
- SSPUSHPTR(SvREFCNT_inc(av));
+ SSPUSHPTR(SvREFCNT_inc_simple(av));
SSPUSHINT(idx);
SSPUSHPTR(SvREFCNT_inc(*sptr));
SSPUSHINT(SAVEt_AELEM);
/* if it gets reified later, the restore will have the wrong refcnt */
if (!AvREAL(av) && AvREIFY(av))
- (void)SvREFCNT_inc(*sptr);
+ SvREFCNT_inc_void(*sptr);
save_scalar_at(sptr);
sv = *sptr;
/* If we're localizing a tied array element, this new sv
SV *sv;
SvGETMAGIC(*sptr);
SSCHECK(4);
- SSPUSHPTR(SvREFCNT_inc(hv));
- SSPUSHPTR(SvREFCNT_inc(key));
+ SSPUSHPTR(SvREFCNT_inc_simple(hv));
+ SSPUSHPTR(SvREFCNT_inc_simple(key));
SSPUSHPTR(SvREFCNT_inc(*sptr));
SSPUSHINT(SAVEt_HELEM);
save_scalar_at(sptr);
Perl_save_svref(pTHX_ SV **sptr)
{
dVAR;
+#ifdef PERL_MAD
+ if (PL_formfeed && *sptr == PL_formfeed)
+ abort();
+#endif
SvGETMAGIC(*sptr);
SSCHECK(3);
SSPUSHPTR(sptr);
case SAVEt_GP: /* scalar reference */
ptr = SSPOPPTR;
gv = (GV*)SSPOPPTR;
- if (SvPVX_const(gv) && SvLEN(gv) > 0) {
- Safefree(SvPVX_mutable(gv));
- }
- SvPV_set(gv, (char *)SSPOPPTR);
- SvCUR_set(gv, (STRLEN)SSPOPIV);
- SvLEN_set(gv, (STRLEN)SSPOPIV);
gp_free(gv);
GvGP(gv) = (GP*)ptr;
if (GvCVu(gv))
sv = *(SV**)ptr;
if (sv && sv != &PL_sv_undef) {
if (SvTIED_mg((SV*)av, PERL_MAGIC_tied))
- (void)SvREFCNT_inc(sv);
+ SvREFCNT_inc_void_NN(sv);
goto restore_sv;
}
}
if (oval && oval != &PL_sv_undef) {
ptr = &HeVAL((HE*)ptr);
if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied))
- (void)SvREFCNT_inc(*(SV**)ptr);
+ SvREFCNT_inc_void(*(SV**)ptr);
SvREFCNT_dec(sv);
av = (AV*)hv; /* what to refcnt_dec */
goto restore_sv;
if (PL_comppad)
PL_curpad = AvARRAY(PL_comppad);
else
- PL_curpad = Null(SV**);
+ PL_curpad = NULL;
break;
case SAVEt_PADSV:
{
break;
}
#else
+ PERL_UNUSED_CONTEXT;
PERL_UNUSED_ARG(cx);
#endif /* DEBUGGING */
}