summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mro.c4
-rwxr-xr-xt/op/universal.t13
2 files changed, 16 insertions, 1 deletions
diff --git a/mro.c b/mro.c
index da30c4df7b..4d7ade5747 100644
--- a/mro.c
+++ b/mro.c
@@ -546,6 +546,10 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash)
SvREFCNT_dec((SV*)meta->mro_linear_c3);
meta->mro_linear_dfs = NULL;
meta->mro_linear_c3 = NULL;
+ if (meta->isa) {
+ SvREFCNT_dec(meta->isa);
+ meta->isa = NULL;
+ }
/* Inc the package generation, since our @ISA changed */
meta->pkg_gen++;
diff --git a/t/op/universal.t b/t/op/universal.t
index 83916ee5f5..f1c0323c67 100755
--- a/t/op/universal.t
+++ b/t/op/universal.t
@@ -10,7 +10,7 @@ BEGIN {
require "./test.pl";
}
-plan tests => 112;
+plan tests => 116;
$a = {};
bless $a, "Bob";
@@ -234,3 +234,14 @@ like( $@, qr/Can't call method "DOES" on unblessed reference/,
# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-05/msg01710.html
# but never actually tested.
is(UNIVERSAL->can("NoSuchPackage::foo"), undef);
+
+@splatt::ISA = 'zlopp';
+ok (splatt->isa('zlopp'));
+ok (!splatt->isa('plop'));
+
+# This should reset the ->isa lookup cache
+@splatt::ISA = 'plop';
+# And here is the new truth.
+ok (!splatt->isa('zlopp'));
+ok (splatt->isa('plop'));
+