* gc-mark.c (scm_mark_all): Do not rely on hooks to run the weak
hashtable and guardian machinery but call the relevant functions directly. * guardians.h, guardians.c, deprecated.h, deprecated.c (scm_destroy_guardian_x, scm_guardian_greedy_p, scm_guardian_destroyed_p, scm_guard, scm_get_one_zombie): Deprecated and moved into deprecated.[ch]. * guardians.h, guardians.c: Mostly rewritten. (scm_i_init_guardians_for_gc, scm_i_identify_inaccessible_guardeds, scm_i_mark_inaccessible_guardeds): New. * weaks.h, weaks.c (SCM_I_WVECT_TYPE, SCM_I_SET_WVECT_TYPE): New. (SCM_I_WVECT_N_ITEMS, SCM_I_SET_WVECT_N_ITEMS): New. (SCM_WVECTF_NOSCAN, SCM_WVECT_NOSCAN_P): Removed. (scm_weaks_prehistory): Removed. (scm_i_init_weak_vectors_for_gc, scm_i_mark_weak_vector, scm_i_mark_weak_vectors_non_weaks, scm_i_remove_weaks_from_weak_vectors, scm_i_remove_weaks): New. (scm_weak_vector_gc_init, scm_mark_weak_vector_spines, scm_scan_weak_vectors): Removed. * hashtab.h (scm_i_scan_weak_hashtables): New. * hashtab.c (make_hash_table, scm_i_rehash): Do not use SCM_WVECTF_NOSCAN. (hashtable_print): Use SCM_HASHTABLE_N_ITEMS instead of t->n_items. (scan_weak_hashtables, scm_i_scan_weak_hashtables): Renamed former to latter. Do not scan the alists themselves, this is done by the weak vector code now. Just update the element count. * vectors.h (SCM_I_WVECT_TYPE, SCM_I_WVECT_EXTRA): Renamed former to latter. The type is now only part of the cell word. (SCM_I_SET_WVECT_TYPE, SCM_I_SET_WVECT_EXTRA): Likewise. * init.c (scm_i_init_guile): Do not call scm_weaks_prehistory.
This commit is contained in:
parent
5070fd11b2
commit
06c1d90009
11 changed files with 519 additions and 703 deletions
|
|
@ -24,15 +24,11 @@
|
|||
|
||||
#include "libguile/__scm.h"
|
||||
|
||||
SCM_API SCM scm_make_guardian (SCM greedy_p);
|
||||
SCM_API SCM scm_destroy_guardian_x (SCM guardian);
|
||||
SCM_API SCM scm_make_guardian (void);
|
||||
|
||||
SCM_API SCM scm_guardian_greedy_p (SCM guardian);
|
||||
SCM_API SCM scm_guardian_destroyed_p (SCM guardian);
|
||||
|
||||
/* these are to be called from C: */
|
||||
SCM_API SCM scm_guard (SCM guardian, SCM obj, int throw_p);
|
||||
SCM_API SCM scm_get_one_zombie (SCM guardian);
|
||||
SCM_API void scm_i_init_guardians_for_gc (void);
|
||||
SCM_API void scm_i_identify_inaccessible_guardeds (void);
|
||||
SCM_API int scm_i_mark_inaccessible_guardeds (void);
|
||||
|
||||
SCM_API void scm_init_guardians (void);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue