If anything should go wrong with the order things are freed, we
could get crashes from this code. The assertions seem like a
good idea.
do {
if ((stash = SvSTASH(sv)) && HvNAME(stash)) {
CV* destructor = NULL;
+ assert(SvTYPE(stash) == SVt_PVHV);
if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
if (!destructor) {
GV * const gv =
)
{
SV* const tmpref = newRV(sv);
+ assert(SvTYPE(destructor) == SVt_PVCV);
SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
ENTER;
PUSHSTACKi(PERLSI_DESTROY);