From 1b79030aacf372368022de9fdb05a1896ca659b3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 31 Jan 2009 03:04:09 +0000 Subject: [PATCH] improve 'equal' hashing on lists svn: r13332 --- src/mzscheme/src/hash.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index e3c631d453..e37fd7c0de 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -1022,7 +1022,11 @@ static long equal_hash_key(Scheme_Object *o, long k, Hash_Info *hi) { # include "mzhashchk.inc" hi->depth += 2; + k = (k << 3) + k; k += equal_hash_key(SCHEME_CAR(o), 0, hi); + /* If it's a list, don't count cdr direction as depth: */ + if (scheme_is_list(o)) + hi->depth -= 2; o = SCHEME_CDR(o); break; } @@ -1030,6 +1034,7 @@ static long equal_hash_key(Scheme_Object *o, long k, Hash_Info *hi) { # include "mzhashchk.inc" hi->depth += 2; + k = (k << 3) + k; k += equal_hash_key(SCHEME_CAR(o), 0, hi); o = SCHEME_CDR(o); break;