# endif
# endif
# define PAD_SV(po) pad_sv(po)
+# define RUNOPS_DEFAULT runops_debug
#else
# define PAD_SV(po) curpad[po]
+# define RUNOPS_DEFAULT runops_standard
#endif
/****************/
#else
EXT OP * op; /* current op--when not in a global register */
#endif
+EXT int (*runops) _((void)) INIT(RUNOPS_DEFAULT);
EXT I32 * scopestack; /* blocks we've entered */
EXT I32 scopestack_ix;
EXT I32 scopestack_max;
else
stash = gv_stashsv(POPs, TRUE);
- (void)sv_bless(TOPs, stash);
+ (void)sv_bless3(TOPs, stash, TRUE);
RETURN;
}
int rsignal_restore _((int, Sigsave_t*));
int rsignal_save _((int, Sighandler_t, Sigsave_t*));
Sighandler_t rsignal_state _((int));
-int runops _((void));
+int runops_standard _((void));
+#ifdef DEBUGGING
+int runops_debug _((void));
+#endif
void rxres_free _((void** rsp));
void rxres_restore _((void** rsp, REGEXP* rx));
void rxres_save _((void** rsp, REGEXP* rx));
void sv_add_arena _((char* ptr, U32 size, U32 flags));
int sv_backoff _((SV* sv));
SV* sv_bless _((SV* sv, HV* stash));
+SV* sv_bless3 _((SV* sv, HV* stash, bool zaptilde));
void sv_catpvf _((SV* sv, const char* pat, ...));
void sv_catpv _((SV* sv, char* ptr));
void sv_catpvn _((SV* sv, char* ptr, STRLEN len));
}
SV*
-sv_bless(sv,stash)
+sv_bless3(sv,stash,zaptilde)
SV* sv;
HV* stash;
+bool zaptilde;
{
dTHR;
SV *ref;
if (SvOBJECT(ref)) {
if (SvTYPE(ref) != SVt_PVIO)
--sv_objcount;
+ if (zaptilde && SvRMAGICAL(ref))
+ sv_unmagic(ref, '~'); /* stop cross-class pointer forgery */
SvREFCNT_dec(SvSTASH(ref));
}
}
return sv;
}
+SV*
+sv_bless(sv,stash)
+SV* sv;
+HV* stash;
+{
+ return sv_bless3(sv, stash, FALSE);
+}
+
static void
sv_unglob(sv)
SV* sv;