fix single-float hashing

This commit is contained in:
Matthew Flatt 2015-08-06 09:24:47 -06:00
parent 6bcb449b55
commit 0efd052218
2 changed files with 8 additions and 1 deletions

View File

@ -1204,6 +1204,9 @@ XFORM_NONGCING static uintptr_t fast_equal_hash_key(Scheme_Object *o, uintptr_t
}
#ifdef MZ_USE_SINGLE_FLOATS
case scheme_float_type:
{
return k + dbl_hash_val(SCHEME_FLT_VAL(o));
}
#endif
case scheme_double_type:
{
@ -1727,10 +1730,13 @@ XFORM_NONGCING static uintptr_t fast_equal_hash_key2(Scheme_Object *o, int *_don
return t - SCHEME_INT_VAL(o);
#ifdef MZ_USE_SINGLE_FLOATS
case scheme_float_type:
{
return dbl_hash2_val(SCHEME_FLT_VAL(o));
}
#endif
case scheme_double_type:
{
return dbl_hash2_val(SCHEME_FLOAT_VAL(o));
return dbl_hash2_val(SCHEME_DBL_VAL(o));
}
#ifdef MZ_LONG_DOUBLE
case scheme_long_double_type:

View File

@ -1446,6 +1446,7 @@ static int compare_keys(const void *a, const void *b)
|| SCHEME_CHAR_STRINGP(v) \
|| SCHEME_BYTE_STRINGP(v) \
|| SCHEME_CHARP(v) \
|| SCHEME_NUMBERP(v) \
|| SAME_TYPE(SCHEME_TYPE(v), scheme_module_index_type))
av = ((Scheme_Object **)a)[0];
bv = ((Scheme_Object **)b)[0];