From c8d14cfc6c2d19077d137c7e917fbb4f104de222 Mon Sep 17 00:00:00 2001 From: Paul Eggert <eggert@cs.ucla.edu> Date: Sun, 19 Feb 2017 12:22:33 -0800 Subject: [PATCH] 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. --- src/fns.c | 5 ++--- src/lisp.h | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/fns.c b/src/fns.c index be00bfd8681..3fed92dfec1 100644 --- a/src/fns.c +++ b/src/fns.c @@ -4445,9 +4445,8 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) /* Look for `:rehash-threshold THRESHOLD'. */ i = get_key_arg (QCrehash_threshold, nargs, args, used); - rehash_threshold = - i ? (FLOATP (args[i]) ? XFLOAT_DATA (args[i]) : -1.0) - : DEFAULT_REHASH_THRESHOLD; + rehash_threshold = (!i ? DEFAULT_REHASH_THRESHOLD + : FLOATP (args[i]) ? XFLOAT_DATA (args[i]) : 0); if (! (0 < rehash_threshold && rehash_threshold <= 1)) signal_error ("Invalid hash table rehash threshold", args[i]); diff --git a/src/lisp.h b/src/lisp.h index d8030728a5a..be42b3354e2 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1998,13 +1998,13 @@ struct Lisp_Hash_Table /* Number of key/value entries in the table. */ 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. */ - bool_bf pure : 1; + bool pure; - /* Resize hash table when number of entries/ table size is >= this - ratio, a float. */ - float rehash_threshold; + /* Resize hash table when number of entries / table size is >= this + ratio. */ + double rehash_threshold; /* 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.39.5