diff options
author | Father Chrysostomos <sprout@cpan.org> | 2010-10-12 10:13:58 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2010-10-12 12:52:12 -0700 |
commit | d056e33c1ea02abb0c031adb18b181624282ba3c (patch) | |
tree | be509216d46bd9a97ddb6013ce278f4f104d5f68 /proto.h | |
parent | 11f9f0eda0026b9120e2ceb1b15c72667d1c91ac (diff) | |
download | perl-d056e33c1ea02abb0c031adb18b181624282ba3c.tar.gz |
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.
Diffstat (limited to 'proto.h')
-rw-r--r-- | proto.h | 6 |
1 files changed, 1 insertions, 5 deletions
@@ -2258,11 +2258,7 @@ PERL_CALLCONV void Perl_mro_method_changed_in(pTHX_ HV* stash) #define PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN \ assert(stash) -PERL_CALLCONV void Perl_mro_package_moved(pTHX_ const HV *stash) - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED \ - assert(stash) - +PERL_CALLCONV void Perl_mro_package_moved(pTHX_ HV * const stash, const HV * const oldstash, const GV * const gv, const char *newname, STRLEN newname_len); PERL_CALLCONV void Perl_mro_register(pTHX_ const struct mro_alg *mro) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_MRO_REGISTER \ |