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;
 	}
     }