Refactored disappearing link hash table variables into a hash table struct
Update finalize.c

Changed C99-style designated init of GC_dl_hashtbl struct to use old C89-style for wider compiler compatibility.
Moved most code from disappearing_link manipulation functions
(except for argument checks) to new *_inner function, accepting
a pointer to GC_dl_hashtbl along with the original arguments.

* finalize.c (GC_general_register_disappearing_link,
GC_unregister_disappearing_link, GC_move_disappearing_link):
Moved code out into their respective *_inner functions, namely
GC_register_disappearing_link_inner,
GC_unregister_disappearing_link_inner,
GC_move_disappearing_link_inner respectively. These _inner
functions accept an additional argument which is a pointer
to struct dl_hashtbl_s on top of its original arguments.
Moved code from GC_move_disappearing_link_inner that is within
locked region to GC_move_disappearing_link_locked. Also moved
DECL_LOCK_STATE from GC_unregister_disappearing_link to
GC_unregister_disappearing_link_inner.

* finalize.c (GC_move_disappearing_link_inner,
GC_unregister_disappearing_link_inner): As described above.
Created GC_make_disappearing_links_disappear and
GC_remove_dangling_disappearing_links. Moved related code under
comments for those respective functions into their respective
*_inner functions which accepts an additional dl_hashtbl_s struct.
Also refactored dl_hashtbl iteration and entry deletion codes into
macros to ease readability.

* finalize.c (GC_finalize): As described above.
Removed _inner suffix from
GC_make_disappearing_links_disappear_inner and
GC_remove_dangling_disappearing_links_inner.
Also replace 0 with NULL for pointers for refactored codes.
Moved DCL_LOCK_STATE to immediately follow last local var decl.
GC_move_disappearing_link_locked: rename back to
GC_move_disappearing_link_inner.
* finalize.c (GC_make_disappearing_links_disappear,
GC_remove_dangling_disappearing_links,
GC_move_disappearing_link_inner, GC_move_disappearing_link) :
As described above.
Changed pointer comparison to NULL from p == NULL to !p.
* finalize.c (DELETE_DL_HASHTBL_ENTRY) : As above.
Changed pointer comparison to NULL from p == NULL to !p.
* finalize.c (ITERATE_DL_HASHTBL_BEGIN) : As above.
Minor code refactoring of GC_register/move/unregister_disappearing_link

* finalize.c (dl_set_next): Cast result to void.
* finalize.c (GC_general_register_disappearing_link,
GC_unregister_disappearing_link_inner,
GC_move_disappearing_link_inner, DELETE_DL_HASHTBL_ENTRY): Use
explicit comparison to NULL instead of "!" operator.
* finalize.c (FREE_DL_ENTRY): New macro.
* finalize.c (GC_unregister_disappearing_link_inner): Use
FREE_DL_ENTRY.
* finalize.c (GC_move_disappearing_link_inner): Add comment; use NULL
instead of 0 for pointers.
* finalize.c (GC_dump_finalization, ITERATE_DL_HASHTBL_BEGIN,
GC_finalize, GC_enqueue_all_finalizers): Remove redundant parenthesis
in expression for dl_size/fo_size calculation.
* finalize.c (DELETE_DL_HASHTBL_ENTRY): Add outermost '{', '}' braces.
* finalize.c (GC_make_disappearing_links_disappear_inner,
GC_remove_dangling_disappearing_links_inner): Move outermost '{', '}'
braces to ITERATE_DL_HASHTBL_BEGIN/END, respectively; add trailing ';'
for DELETE_DL_HASHTBL_ENTRY call.
Move LOCK/UNLOCK from GC_unregister_disappearing_link_inner outer

* finalize.c (GC_unregister_disappearing_link_inner): Add comment;
change return type (return entry of unregistered linked or NULL);
do not check link alignment; do not acquire the lock and do not free
the unregistered entry.
* finalize.c (GC_unregister_disappearing_link): Check link alignment,
invoke GC_unregister_disappearing_link_inner holding the allocation
lock and free found entry (if any).
dded long weakref support.

* include/gc.h: Added 3 GC_API functions for long weakref support:
GC_register_long_link, GC_unregister_long_link and GC_move_long_link.
* include/gc.h: Added corresponding GC_REGISTER_LONG_LINK macros.
* finalize.c: Add implementation of the above functions,
GC_ll_hashtbl for long links and GC_old_ll_entries.
* finalize.c (GC_push_finalizer_structures): GC_push_all long link
hash table entries as well.
* finalize.c (GC_dump_finalization): Refactored dump
disappearing link code out to GC_dump_finalization_links accepting
an argument of pointer to struct dl_hashtbl_s.
* finalize.c (GC_print_finalization_stats): Added long link stats
print out.
* finalize.c (GC_finalize): Added saving current GC_ll_hashtbl
entry count to GC_old_ll_entries,
GC_make_disappearing_links_disappear and
GC_remove_dangling_disappearing_links for long links.
Added long weakref support.

* include/gc.h: Added 3 GC_API functions for long weakref support:
GC_register_long_link, GC_unregister_long_link and GC_move_long_link.
* include/gc.h: Added corresponding GC_REGISTER_LONG_LINK macros.
* finalize.c: Add implementation of the above functions,
GC_ll_hashtbl for long links and GC_old_ll_entries.
* finalize.c (GC_push_finalizer_structures): GC_push_all long link
hash table entries as well.
* finalize.c (GC_dump_finalization): Refactored dump
disappearing link code out to GC_dump_finalization_links accepting
an argument of pointer to struct dl_hashtbl_s.
* finalize.c (GC_print_finalization_stats): Added long link stats
print out.
* finalize.c (GC_finalize): Added saving current GC_ll_hashtbl
entry count to GC_old_ll_entries,
GC_make_disappearing_links_disappear and
GC_remove_dangling_disappearing_links for long links.
Merge branch 'add-long-weakref' of https://github.com/zachsaw/bdwgc into add-long-weakref
Redone the comments for long link GC_API functions.

* include/gc.h: As above.
Added GC_LONG_REFS_NOT_NEEDED ifdefs to exclude long link
functionality and other minor changes.

* finalize.c (GC_push_finalizer_structures,
GC_register_long_link, GC_unregister_long_link,
GC_move_long_link, GC_finalize): GC_LONG_REFS_NOT_NEEDED ifdefs to
exclude long link functionality.
* finalize.c (GC_dump_finalization_links,
GC_register_disappearing_link_inner,
GC_move_disappearing_link_inner): Changed from GC_INLINE to STATIC
function declaration.
* include/gc.h: use 2 spaces as a sentence delimiter in comment
added in previous commit.
Minor code refactoring of dumping routines related to 'long' links

* finalize.c (struct disappearing_link): Remove STATIC.
* finalize.c (GC_dl_hashtbl, GC_ll_hashtbl): Define separately from
dl_hashtbl_s definition.
* finalize.c (GC_grow_table): Reformat comment.
* finalize.c (GC_dump_finalization_links): Pass 'dl_hashtbl' argument
as pointer to constant struct.
* finalize.c (GC_dump_finalization_links, GC_dump_finalization):
Adjust printed message.
* finalize.c (GC_old_ll_entries): Do not define if
GC_LONG_REFS_NOT_NEEDED.
* finalize.c (IF_LONG_REFS_PRESENT_ELSE): New macro (only if not
SMALL_CONFIG).
* finalize.c (GC_print_finalization_stats): Use
IF_LONG_REFS_PRESENT_ELSE (instead of testing GC_LONG_REFS_NOT_NEEDED);
make printed messages more compact.
Add tests for GC_register/move/unregister_long_link

* tests/test.c (live_long_refs): New global variable (only if
not GC_LONG_REFS_NOT_NEEDED and not MACOS).
* tests/test.c (mktree): Test GC_REGISTER_LONG_LINK,
GC_move_long_link, GC_unregister_long_link (using live_long_refs)
unless GC_LONG_REFS_NOT_NEEDED.
* tests/test.c (check_heap_stats): Define "still_long_live" local
variable, count non-null elements of live_long_refs, print number of
non-null elements of live_long_refs (if any) unless
GC_LONG_REFS_NOT_NEEDED.
Merge branch 'master' into add-long-weakref

Conflicts:
	finalize.c
Fix typo and refine comment of GC_enable in public header

* include/gc.h (GC_enable): Fix typo and refine comment.
Add assertion to GC_enable() ensuring no counter underflow

* misc.c (GC_enable): Add assertion against GC_dont_gc underflow.