]> git.eshelyaron.com Git - emacs.git/commitdiff
(hashfn_eq, hashfn_eql): Don't handle strings specially
authorGerd Moellmann <gerd@gnu.org>
Fri, 11 Aug 2000 12:59:31 +0000 (12:59 +0000)
committerGerd Moellmann <gerd@gnu.org>
Fri, 11 Aug 2000 12:59:31 +0000 (12:59 +0000)
since they aren't relocated anymore.
(sxhash_string): Make sure returned hash code fits in a Lisp
integer.

src/fns.c

index 69b9427998f2e1742cb4a5c401099f989ba51580..1f53ecb4a04632f6ab2577232a73a979ead77db5 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -3852,12 +3852,9 @@ hashfn_eq (h, key)
      struct Lisp_Hash_Table *h;
      Lisp_Object key;
 {
-  /* Lisp strings can change their address.  Don't try to compute a
-     hash code for a string from its address.  */
-  if (STRINGP (key))
-    return sxhash_string (XSTRING (key)->data, XSTRING (key)->size);
-  else
-    return XUINT (key) ^ XGCTYPE (key);
+  unsigned hash = XUINT (key) ^ XGCTYPE (key);
+  xassert ((hash & ~VALMASK) == 0);
+  return hash;
 }
 
 
@@ -3870,14 +3867,13 @@ hashfn_eql (h, key)
      struct Lisp_Hash_Table *h;
      Lisp_Object key;
 {
-  /* Lisp strings can change their address.  Don't try to compute a
-     hash code for a string from its address.  */
-  if (STRINGP (key))
-    return sxhash_string (XSTRING (key)->data, XSTRING (key)->size);
-  else if (FLOATP (key))
-    return sxhash (key, 0);
+  unsigned hash;
+  if (FLOATP (key))
+    hash = sxhash (key, 0);
   else
-    return XUINT (key) ^ XGCTYPE (key);
+    hash = XUINT (key) ^ XGCTYPE (key);
+  xassert ((hash & ~VALMASK) == 0);
+  return hash;
 }
 
 
@@ -3890,7 +3886,9 @@ hashfn_equal (h, key)
      struct Lisp_Hash_Table *h;
      Lisp_Object key;
 {
-  return sxhash (key, 0);
+  unsigned hash = sxhash (key, 0);
+  xassert ((hash & ~VALMASK) == 0);
+  return hash;
 }
 
 
@@ -4445,7 +4443,8 @@ sweep_weak_hash_tables ()
       + (unsigned)(Y))
 
 
-/* Return a hash for string PTR which has length LEN.  */
+/* Return a hash for string PTR which has length LEN.  The hash
+   code returned is guaranteed to fit in a Lisp integer.  */
 
 static unsigned
 sxhash_string (ptr, len)
@@ -4465,7 +4464,7 @@ sxhash_string (ptr, len)
       hash = ((hash << 3) + (hash >> 28) + c);
     }
 
-  return hash & 07777777777;
+  return hash & VALMASK;
 }