diff options
author | Ludovic Courtes <ludovic.courtes@laas.fr> | 2006-05-23 21:59:42 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2008-09-05 09:34:10 +0200 |
commit | e9d635e5d82e882ed39de65f6312aae1ade43d1f (patch) | |
tree | a77e9c821e377c51a0b8ba2c4d1e6ec21383bc5c /libguile/smob.c | |
parent | 8574d367a9de70b2882c0f3393c6b5040d0f6e4d (diff) | |
download | guile-e9d635e5d82e882ed39de65f6312aae1ade43d1f.tar.gz |
Added support for SMOBs free function (via finalizers).
* libguile/smob.c (scm_i_finalize_smob): New.
* libguile/smob.h (SCM_NEWSMOB): Register `scm_i_finalize_smob ()' as a
finalizer for Z if its SMOB type has a free function.
(SCM_NEWSMOB3): Likewise.
(scm_i_finalize_smob): New declaration.
git-archimport-id: lcourtes@laas.fr--2005-libre/guile-core--boehm-gc--1.9--patch-26
Diffstat (limited to 'libguile/smob.c')
-rw-r--r-- | libguile/smob.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libguile/smob.c b/libguile/smob.c index b0e95fe2f..66b7696ed 100644 --- a/libguile/smob.c +++ b/libguile/smob.c @@ -37,6 +37,10 @@ #include "libguile/smob.h" +#include <gc/gc.h> +#include <gc/gc_mark.h> + + /* scm_smobs scm_numsmob @@ -488,8 +492,6 @@ free_print (SCM exp, SCM port, scm_print_state *pstate SCM_UNUSED) /* Marking SMOBs using user-supplied mark procedures. */ -#include <gc/gc.h> -#include <gc/gc_mark.h> /* The freelist and GC kind used for SMOB types that provide a custom mark procedure. */ @@ -599,6 +601,19 @@ scm_i_new_smob_with_mark_proc (scm_t_bits tc, scm_t_bits data1, return cell; } + +/* Finalize SMOB by calling its SMOB type's free function, if any. */ +SCM +scm_i_finalize_smob (SCM smob, SCM data) +{ + size_t (* free_smob) (SCM); + + free_smob = scm_smobs[SCM_SMOBNUM (smob)].free; + if (free_smob) + free_smob (smob); + + return SCM_UNSPECIFIED; +} void |