Mercurial > emacs
changeset 35513:0fbf1517a670
(sweep_weak_table): Fix code taking items out of
the hash collision chain. Some cleanup.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Wed, 24 Jan 2001 16:10:06 +0000 |
parents | 72f9f4beaf6f |
children | e25ec5ecc3f5 |
files | src/fns.c |
diffstat | 1 files changed, 6 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fns.c Wed Jan 24 15:39:00 2001 +0000 +++ b/src/fns.c Wed Jan 24 16:10:06 2001 +0000 @@ -4345,21 +4345,17 @@ for (bucket = 0; bucket < n; ++bucket) { - Lisp_Object idx, prev; + Lisp_Object idx, next, prev; /* Follow collision chain, removing entries that don't survive this garbage collection. */ - idx = HASH_INDEX (h, bucket); prev = Qnil; - while (!GC_NILP (idx)) + for (idx = HASH_INDEX (h, bucket); !GC_NILP (idx); idx = next) { - int remove_p; int i = XFASTINT (idx); - Lisp_Object next; - int key_known_to_survive_p, value_known_to_survive_p; - - key_known_to_survive_p = survives_gc_p (HASH_KEY (h, i)); - value_known_to_survive_p = survives_gc_p (HASH_VALUE (h, i)); + int key_known_to_survive_p = survives_gc_p (HASH_KEY (h, i)); + int value_known_to_survive_p = survives_gc_p (HASH_VALUE (h, i)); + int remove_p; if (EQ (h->weak, Qkey)) remove_p = !key_known_to_survive_p; @@ -4380,7 +4376,7 @@ { /* Take out of collision chain. */ if (GC_NILP (prev)) - HASH_INDEX (h, i) = next; + HASH_INDEX (h, bucket) = next; else HASH_NEXT (h, XFASTINT (prev)) = next; @@ -4413,8 +4409,6 @@ } } } - - idx = next; } }