remove weak pairs, rewrite weak vectors
authorAndy Wingo <wingo@pobox.com>
Mon, 24 Oct 2011 08:52:55 +0000 (10:52 +0200)
committerAndy Wingo <wingo@pobox.com>
Mon, 24 Oct 2011 10:54:14 +0000 (12:54 +0200)
commita141db8604ecca8a4f4c210cd680b41e337c689a
tree6d7fec7621586e8c569ec2451e2a4c93f674e5a5
parentc4e83f74c2f518d8c25959c6e7bb2b36e7058d01
remove weak pairs, rewrite weak vectors

* libguile/weak-vector.c:
* libguile/weak-vector.h: Renamed from weaks.[ch].  Remove weak pairs.
  They were not safe to access with `car' and `cdr'.  Remove weak alist
  vectors, as we have weak tables and sets.  Reimplement weak vectors,
  moving the implementation here.

* libguile/vectors.c:
* libguile/vectors.h: Remove the extra header word.  Use
  scm_c_weak_vector_ref / scm_c_weak_vector_set_x to access weak
  vectors.

* libguile/snarf.h: Remove the extra header word in vectors.

* libguile/threads.c (do_thread_exit, fat_mutex_lock, fat_mutex_unlock):
  Instead of weak pairs, store thread-owned mutexes in a list of
  one-element weak vectors.

* libguile/guardians.c (finalize_guarded): Similarly, store object
  guardians in a list of one-element weak vectors.

* libguile/modules.c (scm_module_reverse_lookup): We no longer need to
  handle the case of weak references.

* libguile/print.c (iprin1): Use the standard vector accessor to print
  vectors.

* libguile.h:
* libguile/Makefile.am:
* libguile/gc-malloc.c:
* libguile/gc.c:
* libguile/goops.c:
* libguile/init.c:
* libguile/objprop.c:
* libguile/struct.c: Update includes.

* module/ice-9/weak-vector.scm: Load weak vector definitions using an
  extension instead of %init-weaks-builtins.

* test-suite/tests/weaks.test: Use the make-...-hash-table names instead
  of the old alist vector names.
22 files changed:
libguile.h
libguile/Makefile.am
libguile/gc-malloc.c
libguile/gc.c
libguile/goops.c
libguile/guardians.c
libguile/init.c
libguile/modules.c
libguile/objprop.c
libguile/print.c
libguile/snarf.h
libguile/srcprop.c
libguile/struct.c
libguile/threads.c
libguile/vectors.c
libguile/vectors.h
libguile/weak-vector.c [new file with mode: 0644]
libguile/weak-vector.h [new file with mode: 0644]
libguile/weaks.c [deleted file]
libguile/weaks.h [deleted file]
module/ice-9/weak-vector.scm
test-suite/tests/weaks.test