]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix glitches in recent hash table changes
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 19 Feb 2017 20:22:33 +0000 (12:22 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 19 Feb 2017 20:23:19 +0000 (12:23 -0800)
* 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
src/lisp.h

index be00bfd86814b701d64e4ec8e1b5cb9509bb5550..3fed92dfec1e6a3fb658ea205a6d6b1044dc397f 100644 (file)
--- 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]);
 
index d8030728a5a0edbb64c873888f234509ccea1b21..be42b3354e21294446bd9d37989e88d121f69a9b 100644 (file)
@@ -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.