Use ptrdiff_t instead of Lisp_Object for collision
commit5cbdaa98f975c870c4afa24346630a18b55f27ab
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 21 Feb 2017 23:31:29 +0000 (21 15:31 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 21 Feb 2017 23:39:17 +0000 (21 15:39 -0800)
treeb0a776c467e6b1d53fd1e2837305fbc512803df7
parent7207b63c8e290ddec33908ce8d38be5793388318
Use ptrdiff_t instead of Lisp_Object for collision

* src/alloc.c (purecopy_hash_table): Assign, don’t purecopy.
* src/fns.c (set_hash_next_slot, set_hash_index_slot): Hash index
arg is now ptrdiff_t index (or -1 if empty), not Lisp_Object
integer (or Qnil if empty).  All callers changed.
(larger_vecalloc): New static function.
(larger_vector): Use it.
(HASH_NEXT, HASH_INDEX): Move here from lisp.h.  Return ptrdiff_t
index (or -1) not Lisp_Object integer (or Qnil).  All callers changed.
* src/fns.c (make_hash_table, maybe_resize_hash_table, hash_lookup)
(hash_put, hash_remove_from_table, hash_clear, sweep_weak_table):
* src/profiler.c (evict_lower_half, record_backtrace):
-1, not nil, is now the convention for end of collision list.
* src/fns.c (maybe_resize_hash_table): Avoid double-initialization
of the free list.  Reallocate H->next last, in case other
reallocations exhaust memory.
* src/lisp.h (struct Lisp_Hash_Table): ‘next_free’ is now
ptrdiff_t, not Lisp_Object.  Adjust commentary for ‘next’ and
‘index’, which no longer contain nil.
(HASH_NEXT, HASH_INDEX): Move to src/fns.c.
src/alloc.c
src/fns.c
src/lisp.h
src/profiler.c