diff options
author | Nicholas Clark <nick@ccl4.org> | 2008-12-26 17:14:44 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2008-12-27 21:12:12 +0000 |
commit | 123892d916359369839f3896f283189be71dc32c (patch) | |
tree | 189e4891a00ab4e74c3fe294b3ce2bd26b47d0ef | |
parent | fa60396f123333e92849ecaecffb9252458d6678 (diff) | |
download | perl-123892d916359369839f3896f283189be71dc32c.tar.gz |
Add MRO_GET_PRIVATE_DATA() to use the cached mro private data where possible.
-rw-r--r-- | hv.h | 5 | ||||
-rw-r--r-- | mro.c | 4 |
2 files changed, 7 insertions, 2 deletions
@@ -57,6 +57,11 @@ struct mro_meta { HV *isa; /* Everything this class @ISA */ }; +#define MRO_GET_PRIVATE_DATA(smeta, which) \ + (((smeta)->mro_which && (which) == (smeta)->mro_which) \ + ? MUTABLE_SV((smeta)->mro_linear_c3) \ + : Perl_mro_get_private_data(aTHX_ (smeta), (which))) + /* Subject to change. Don't access this directly. */ @@ -231,7 +231,7 @@ S_mro_get_linear_isa_dfs(pTHX_ HV *stash, U32 level) meta = HvMROMETA(stash); /* return cache if valid */ - if((retval = MUTABLE_AV(Perl_mro_get_private_data(aTHX_ meta, dfs_alg)))) { + if((retval = MUTABLE_AV(MRO_GET_PRIVATE_DATA(meta, dfs_alg)))) { return retval; } @@ -382,7 +382,7 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level) meta = HvMROMETA(stash); /* return cache if valid */ - if((retval = MUTABLE_AV(Perl_mro_get_private_data(aTHX_ meta, c3_alg)))) { + if((retval = MUTABLE_AV(MRO_GET_PRIVATE_DATA(meta, c3_alg)))) { return retval; } |