From 123892d916359369839f3896f283189be71dc32c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Fri, 26 Dec 2008 17:14:44 +0000 Subject: [PATCH] Add MRO_GET_PRIVATE_DATA() to use the cached mro private data where possible. --- hv.h | 5 +++++ mro.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/hv.h b/hv.h index 66fb6f2d8ee..1481d5b8e9c 100644 --- a/hv.h +++ b/hv.h @@ -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. */ diff --git a/mro.c b/mro.c index 23070d990d6..4ce939becb1 100644 --- a/mro.c +++ b/mro.c @@ -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; }