Rework the hash table entry abstraction.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 13 Aug 2010 20:18:56 +0000 (20:18 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 13 Aug 2010 20:18:56 +0000 (20:18 +0000)
commite751d3f9b7465d9d19152fbb832c9f52e6c0d316
treebc42c41ce73ccb8d07a07692e08a1b378cca674a
parent8e4a08948e1498fe79853338afc9e4e7db70bbd1
Rework the hash table entry abstraction.

This simplifies some of the code (at the expense of a longer
definition for the abstraction leading to a longer hashtb.scm
altogether), and makes it less prone to mistakes with using the
keys and data of entries without checking their validity -- which
will matter especially for hash tables with ephemeron entries when
those are implemented.

Check the results of the key hash table function.  Sprinkle some
guarantees throughout the code.  Disable type and range checks in
the hash table methods, where it is safe to do so.

With type and range checks still enabled, performance on strong eq
and eqv hash tables is no different from what it was last week.
Performance on weak hash tables is ever so slightly worse, but that
is because weak hash tables were incorrect before.

New tests check for some regressions.
src/runtime/hashtb.scm
tests/runtime/test-hash-table.scm