else if (ht->test_function == lisp_object_eql_equal)
DO_NOTHING;
else
- abort ();
+ ABORT ();
if (ht->count || !print_readably)
{
break;
default:
- abort ();
+ ABORT ();
}
return make_general_lisp_hash_table (hash_function, test_function,
else if (EQ (key, Qdata)) data = value;
else if (EQ (key, Qtype))/*obsolete*/ weakness = value;
else
- abort ();
+ ABORT ();
}
/* Create the hash table. */
Keyword :test can be `eq', `eql' (default) or `equal'.
Comparison between keys is done using this function.
If speed is important, consider using `eq'.
-When storing strings in the hash table, you will likely need to use `equal'.
+When hash table keys may be strings, you will likely need to use `equal'.
Keyword :size specifies the number of keys likely to be inserted.
This number of entries can be inserted without enlarging the hash table.
return Qnil;
}
+/* #### If the Lisp function being called does a puthash and this
+ #### causes the hash table to be resized, the results will be quite
+ #### random and we will likely crash. To fix this, either set a
+ #### flag in the hash table while we're mapping and signal an error
+ #### when new entries are added, or fix things to make this
+ #### operation work properly, like this: Store two hash tables in
+ #### each hash table object -- the second one is written to when
+ #### you do a puthash inside of a mapping operation, and the
+ #### various operations need to check both hash tables for entries.
+ #### As soon as the last maphash over a particular hash table
+ #### object terminates, the entries in the second table are added
+ #### to the first (using an unwind-protect). --ben */
+
/* Map *C* function FUNCTION over the elements of a lisp hash table. */
void
elisp_maphash (maphash_function_t function,