Commit cf681889 authored by Gerd Moellmann's avatar Gerd Moellmann
Browse files

(hashfn_eq, hashfn_eql): Don't handle strings specially

since they aren't relocated anymore.
(sxhash_string): Make sure returned hash code fits in a Lisp
integer.
parent 8c1bec7c
......@@ -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;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment