From 3051344be566178999dd8679744e9c3ae9921de4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 25 Sep 2009 12:29:02 +0200 Subject: [PATCH] Remove default port/SMOB finalizers. * libguile/ports.c (scm_port_free0): Remove. (scm_make_port_type): Set `free' to NULL. * libguile/smob.c (scm_make_smob_type): Leave `free' to NULL. (scm_smob_free): Remove. * libguile/smob.h (scm_smob_free): Remove. * libguile/deprecated.c (scm_smob_free): New. * libguile/deprecated.h (scm_smob_free): New declaration. --- libguile/deprecated.c | 15 +++++++++++++++ libguile/deprecated.h | 2 ++ libguile/ports.c | 8 +------- libguile/smob.c | 18 +++--------------- libguile/smob.h | 1 - 5 files changed, 21 insertions(+), 23 deletions(-) diff --git a/libguile/deprecated.c b/libguile/deprecated.c index d0669969c..1b9e58186 100644 --- a/libguile/deprecated.c +++ b/libguile/deprecated.c @@ -633,6 +633,21 @@ scm_set_smob_mfpe (long tc, if (equalp) scm_set_smob_equalp (tc, equalp); } +size_t +scm_smob_free (SCM obj) +{ + long n = SCM_SMOBNUM (obj); + + scm_c_issue_deprecation_warning + ("`scm_smob_free' is deprecated. " + "It is no longer needed."); + + if (scm_smobs[n].size > 0) + scm_gc_free ((void *) SCM_CELL_WORD_1 (obj), + scm_smobs[n].size, SCM_SMOBNAME (n)); + return 0; +} + SCM scm_read_0str (char *expr) { diff --git a/libguile/deprecated.h b/libguile/deprecated.h index f428f7de8..18424d53e 100644 --- a/libguile/deprecated.h +++ b/libguile/deprecated.h @@ -224,6 +224,8 @@ SCM_API void scm_set_smob_mfpe (long tc, int (*print) (SCM, SCM, scm_print_state*), SCM (*equalp) (SCM, SCM)); +SCM_API size_t scm_smob_free (SCM obj); + SCM_API SCM scm_strprint_obj (SCM obj); SCM_API SCM scm_read_0str (char *expr); SCM_API SCM scm_eval_0str (const char *expr); diff --git a/libguile/ports.c b/libguile/ports.c index 24afbfe40..53f64e3eb 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -127,12 +127,6 @@ end_input_default (SCM port SCM_UNUSED, int offset SCM_UNUSED) { } -static size_t -scm_port_free0 (SCM port) -{ - return 0; -} - scm_t_bits scm_make_port_type (char *name, int (*fill_input) (SCM port), @@ -153,7 +147,7 @@ scm_make_port_type (char *name, scm_ptobs[scm_numptob].name = name; scm_ptobs[scm_numptob].mark = 0; - scm_ptobs[scm_numptob].free = scm_port_free0; + scm_ptobs[scm_numptob].free = NULL; scm_ptobs[scm_numptob].print = scm_port_print; scm_ptobs[scm_numptob].equalp = 0; scm_ptobs[scm_numptob].close = 0; diff --git a/libguile/smob.c b/libguile/smob.c index 22b90ad64..42a51fdff 100644 --- a/libguile/smob.c +++ b/libguile/smob.c @@ -97,6 +97,7 @@ scm_markcdr (SCM ptr) return SCM_CELL_OBJECT_1 (ptr); } + /* {Free} */ @@ -106,16 +107,7 @@ scm_free0 (SCM ptr SCM_UNUSED) return 0; } -size_t -scm_smob_free (SCM obj) -{ - long n = SCM_SMOBNUM (obj); - if (scm_smobs[n].size > 0) - scm_gc_free ((void *) SCM_CELL_WORD_1 (obj), - scm_smobs[n].size, SCM_SMOBNAME (n)); - return 0; -} - + /* {Print} */ @@ -307,11 +299,7 @@ scm_make_smob_type (char const *name, size_t size) scm_misc_error (FUNC_NAME, "maximum number of smobs exceeded", SCM_EOL); scm_smobs[new_smob].name = name; - if (size != 0) - { - scm_smobs[new_smob].size = size; - scm_smobs[new_smob].free = scm_smob_free; - } + scm_smobs[new_smob].size = size; /* Make a class object if Goops is present. */ if (SCM_UNPACK (scm_smob_class[0]) != 0) diff --git a/libguile/smob.h b/libguile/smob.h index ca4a418be..ee0e53e64 100644 --- a/libguile/smob.h +++ b/libguile/smob.h @@ -167,7 +167,6 @@ SCM_API void scm_i_finalize_smob (GC_PTR obj, GC_PTR data); SCM_API SCM scm_mark0 (SCM ptr); SCM_API SCM scm_markcdr (SCM ptr); SCM_API size_t scm_free0 (SCM ptr); -SCM_API size_t scm_smob_free (SCM obj); SCM_API int scm_smob_print (SCM exp, SCM port, scm_print_state *pstate); /* The following set of functions is the standard way to create new -- 2.20.1