Hi.

I've now implemented the new rehash behaviour that we discussed
during the conference ~2 months ago. This means that weak mappings
that contain the only reference to a reference-counted object will
free the object when the hashtable is resized. Note that this only
takes care of the most common case of weak mappings. The more
complicated cases will still need the full gc.

For reference:

  INDEX   INDEX    VALUE   VALUE    HANDLING
  REFTYPE CONTENT  REFTYPE CONTENT
  ------------------------------------------
  STRONG  *        STRONG  *        KEEP
  STRONG  *        WEAK    UNREF    KEEP
  STRONG  *        WEAK    SINGLE   FREE
  STRONG  *        WEAK    MULTIPLE KEEP
  WEAK    UNREF    STRONG  *        KEEP
  WEAK    SINGLE   STRONG  *        FREE
  WEAK    MULTIPLE STRONG  *        KEEP
  WEAK    UNREF    WEAK    UNREF    KEEP
  WEAK    UNREF    WEAK    MULTIPLE KEEP
  WEAK    SINGLE   WEAK    *        FREE
  WEAK    *        WEAK    SINGLE   FREE
  WEAK    MULTIPLE WEAK    UNREF    KEEP
  WEAK    MULTIPLE WEAK    MULTIPLE KEEP

  Legend:
    STRONG   Strong (default) reference.
    WEAK     Weak (set with set_weak_flag()) reference.
    *        Any value.
    UNREF    Value that is not reference counted (eg ints or floats).
    SINGLE   Reference-counted value with a single reference.
    MULTIPLE Reference-counted value with more than one reference.
    KEEP     Entry to be kept after the rehash.
    FREE     Entry to be freed during the rehash.

I would appreciate testing, and any comments about the behaviour
(intended or otherwise).

Happy New Year!

        /grubba

Reply via email to