Commit c8d14cfc authored by Paul Eggert's avatar Paul Eggert

Fix glitches in recent hash table changes

* src/fns.c (Fmake_hash_table): Simplify the machine code slightly
by using 0 rather than -1.
* src/lisp.h (struct Lisp_Hash_Table.pure): Now bool rather
than a bitfield, for speed (the bitfield did not save space).
(struct Lisp_Hash_Table.rehash_threshold): Now double rather than
float, since the float caused unwanted rounding errors, e.g.,
(hash-table-rehash-threshold (make-hash-table)) yielded
0.800000011920929 instead of the correct 0.8.
parent 5c1ebfc5
...@@ -4445,9 +4445,8 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) ...@@ -4445,9 +4445,8 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */)
/* Look for `:rehash-threshold THRESHOLD'. */ /* Look for `:rehash-threshold THRESHOLD'. */
i = get_key_arg (QCrehash_threshold, nargs, args, used); i = get_key_arg (QCrehash_threshold, nargs, args, used);
rehash_threshold = rehash_threshold = (!i ? DEFAULT_REHASH_THRESHOLD
i ? (FLOATP (args[i]) ? XFLOAT_DATA (args[i]) : -1.0) : FLOATP (args[i]) ? XFLOAT_DATA (args[i]) : 0);
: DEFAULT_REHASH_THRESHOLD;
if (! (0 < rehash_threshold && rehash_threshold <= 1)) if (! (0 < rehash_threshold && rehash_threshold <= 1))
signal_error ("Invalid hash table rehash threshold", args[i]); signal_error ("Invalid hash table rehash threshold", args[i]);
......
...@@ -1998,13 +1998,13 @@ struct Lisp_Hash_Table ...@@ -1998,13 +1998,13 @@ struct Lisp_Hash_Table
/* Number of key/value entries in the table. */ /* Number of key/value entries in the table. */
ptrdiff_t count; ptrdiff_t count;
/* Non-nil if the table can be purecopied. The table cannot be /* True if the table can be purecopied. The table cannot be
changed afterwards. */ changed afterwards. */
bool_bf pure : 1; bool pure;
/* Resize hash table when number of entries/ table size is >= this /* Resize hash table when number of entries / table size is >= this
ratio, a float. */ ratio. */
float rehash_threshold; double rehash_threshold;
/* Vector of keys and values. The key of item I is found at index /* Vector of keys and values. The key of item I is found at index
2 * I, the value is found at index 2 * I + 1. 2 * I, the value is found at index 2 * I + 1.
......
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