In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/5d27ee4af18b0f3857a1f951f91473c86da29b62?hp=6e2e048be95a027035f83c0f673f8de94e013c87>
- Log ----------------------------------------------------------------- commit 5d27ee4af18b0f3857a1f951f91473c86da29b62 Author: Daniel Dragan <[email protected]> Date: Mon Mar 10 12:29:56 2014 +0000 don't repeatedly call HvUSEDKEYS HvUSEDKEYS contains a function call nowadays. Don't call it repeatedly. ----------------------------------------------------------------------- Summary of changes: dump.c | 13 ++++++++----- hv.c | 6 ++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dump.c b/dump.c index b5998f9..354cd57 100644 --- a/dump.c +++ b/dump.c @@ -1882,20 +1882,22 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo } } break; - case SVt_PVHV: + case SVt_PVHV: { + U32 usedkeys; if (SvOOK(sv)) { struct xpvhv_aux *const aux = HvAUX(sv); Perl_dump_indent(aTHX_ level, file, " AUX_FLAGS = %"UVuf"\n", (UV)aux->xhv_aux_flags); } Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%"UVxf, PTR2UV(HvARRAY(sv))); - if (HvARRAY(sv) && HvUSEDKEYS(sv)) { + usedkeys = HvUSEDKEYS(sv); + if (HvARRAY(sv) && usedkeys) { /* Show distribution of HEs in the ARRAY */ int freq[200]; #define FREQ_MAX ((int)(sizeof freq / sizeof freq[0] - 1)) int i; int max = 0; - U32 pow2 = 2, keys = HvUSEDKEYS(sv); + U32 pow2 = 2, keys = usedkeys; NV theoret, sum = 0; PerlIO_printf(file, " ("); @@ -1937,13 +1939,13 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo } while ((keys = keys >> 1)) pow2 = pow2 << 1; - theoret = HvUSEDKEYS(sv); + theoret = usedkeys; theoret += theoret * (theoret-1)/pow2; PerlIO_putc(file, '\n'); Perl_dump_indent(aTHX_ level, file, " hash quality = %.1"NVff"%%", theoret/sum*100); } PerlIO_putc(file, '\n'); - Perl_dump_indent(aTHX_ level, file, " KEYS = %"IVdf"\n", (IV)HvUSEDKEYS(sv)); + Perl_dump_indent(aTHX_ level, file, " KEYS = %"IVdf"\n", (IV)usedkeys); { STRLEN count = 0; HE **ents = HvARRAY(sv); @@ -2116,6 +2118,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo } } break; + } /* case SVt_PVHV */ case SVt_PVCV: if (CvAUTOLOAD(sv)) { diff --git a/hv.c b/hv.c index 91d4c39..9d80659 100644 --- a/hv.c +++ b/hv.c @@ -1625,8 +1625,10 @@ S_clear_placeholders(pTHX_ HV *hv, U32 items) if (--items == 0) { /* Finished. */ - HvTOTALKEYS(hv) -= (IV)HvPLACEHOLDERS_get(hv); - if (HvUSEDKEYS(hv) == 0) + I32 placeholders = HvPLACEHOLDERS_get(hv); + HvTOTALKEYS(hv) -= (IV)placeholders; + /* HvUSEDKEYS expanded */ + if ((HvTOTALKEYS(hv) - placeholders) == 0) HvHASKFLAGS_off(hv); HvPLACEHOLDERS_set(hv, 0); return; -- Perl5 Master Repository
