This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Reset isa caches on nonexistent substashes when stash trees are moved
authorFather Chrysostomos <sprout@cpan.org>
Tue, 12 Oct 2010 17:13:58 +0000 (10:13 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 12 Oct 2010 19:52:12 +0000 (12:52 -0700)
commitd056e33c1ea02abb0c031adb18b181624282ba3c
treebe509216d46bd9a97ddb6013ce278f4f104d5f68
parent11f9f0eda0026b9120e2ceb1b15c72667d1c91ac
Reset isa caches on nonexistent substashes when stash trees are moved

This fixes the problem of isa cache linearisations’ and method caches’
not being reset on nonexistent packages when they are replaced with
real packages as a result of parent stashes’ being moved. This can
happen in cases like this:

  @left::ISA = 'outer::inner';
  @right::ISA = 'clone::inner';
  {package outer::inner}
  *clone:: = \%outer::;
  print "ok 1", "\n" if left->isa("clone::inner");
  print "ok 2", "\n" if right->isa("outer::inner");

This changes mro_package_moved’s parameter list as documented in the
diff for mro.c. See also the new comments in that function.
embed.fnc
embed.h
hv.c
mro.c
proto.h
sv.c
t/mro/package_aliases.t