1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-03 08:30:09 +00:00

(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.
This commit is contained in:
Gerd Moellmann 2000-08-11 12:59:31 +00:00
parent 8c1bec7c1d
commit cf6818892f

View File

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