diff options
author | Nicholas Clark <nick@ccl4.org> | 2008-09-12 00:19:51 +0000 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2009-03-29 18:19:12 +0100 |
commit | 0bd07ba73c7a2a849e7fc046ab2530d9522c7bcd (patch) | |
tree | fa8b7d3c907c85607d4fbcc83433c6bfaf183381 /hv.c | |
parent | 03e4800518c01563fdda5c145899d4f56a95e72d (diff) | |
download | perl-0bd07ba73c7a2a849e7fc046ab2530d9522c7bcd.tar.gz |
Create a direct lookup hash for ->isa() lookup, by retaining the
de-duping hash used by S_mro_get_linear_isa_dfs(). Provide a new
function Perl_get_isa_hash() to lazily retrieve this. (Which could
actually be static if S_isa_lookup() and Perl_sv_derived_from()
moved into mro.c.) Make S_isa_lookup() use this lookup hash in place
of a linear walk of the linear isa. This should turn isa lookups from
O(n) to O(1), which should make heavy users of ->isa() faster.
(eg PPI, and hence Perl Critic).
p4raw-id: //depot/perl@34354
(cherry-picked from commit a49ba3fcbe357fbacf7b9898df08daa2cbdfc8c4)
Diffstat (limited to 'hv.c')
-rw-r--r-- | hv.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -1701,6 +1701,7 @@ S_hfreeentries(pTHX_ HV *hv) if(meta->mro_linear_dfs) SvREFCNT_dec(meta->mro_linear_dfs); if(meta->mro_linear_c3) SvREFCNT_dec(meta->mro_linear_c3); if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod); + SvREFCNT_dec(meta->isa); Safefree(meta); iter->xhv_mro_meta = NULL; } |