entry = *oentry;
for (; entry; oentry = &HeNEXT(entry), entry = *oentry) {
SV *sv;
- bool mpm = FALSE;
+ U8 mro_changes = 0; /* 1 = isa; 2 = package moved */
const char *name = NULL;
STRLEN namlen;
HV *stash = NULL;
gv_fetchsv(namesv, GV_NOADD_NOINIT, SVt_PVGV)
== (GV *)sv
) {
- mpm = TRUE;
+ mro_changes = 2;
name = SvPV_const(namesv, namlen);
namlen -= 2; /* skip trailing :: */
/* Hang on to it for a bit. */
);
}
}
+ else if (klen == 3 && strnEQ(key, "ISA", 3))
+ mro_changes = 1;
}
if (d_flags & G_DISCARD)
HvHASKFLAGS_off(hv);
}
- if (mpm) mro_package_moved(NULL, stash, NULL, name, namlen);
+ if (mro_changes == 1) mro_isa_changed_in(hv);
+ else if (mro_changes == 2)
+ mro_package_moved(NULL, stash, NULL, name, namlen);
return sv;
}
use strict;
use warnings;
-BEGIN { require q(./test.pl); } plan(tests => 50);
+BEGIN { require q(./test.pl); } plan(tests => 51);
require mro;
ok 'Extra::TSpouse'->isa('Class::Trait::Base'),
'a isa b after undef *a::ISA and @a::ISA modification';
}
+
+{
+ # Deleting $package::{ISA}
+ # Broken in 5.10.0; fixed in 5.13.7
+ @Blength::ISA = 'Bladd';
+ delete $Blength::{ISA};
+ ok !Blength->isa("Bladd"), 'delete $package::{ISA}';
+}