diff options
Diffstat (limited to 'libguile/smob.h')
-rw-r--r-- | libguile/smob.h | 58 |
1 files changed, 7 insertions, 51 deletions
diff --git a/libguile/smob.h b/libguile/smob.h index 990ac057b..22d925b8b 100644 --- a/libguile/smob.h +++ b/libguile/smob.h @@ -22,11 +22,10 @@ -#include <libguile/error.h> -#include <libguile/gc.h> -#include "libguile/inline.h" +#include "libguile/error.h" +#include "libguile/gc.h" #include "libguile/print.h" -#include <libguile/snarf.h> +#include "libguile/snarf.h" @@ -36,7 +35,6 @@ typedef struct scm_smob_descriptor { char const *name; size_t size; - SCM (*mark) (SCM); size_t (*free) (SCM); int (*print) (SCM exp, SCM port, scm_print_state *pstate); SCM (*equalp) (SCM, SCM); @@ -78,14 +76,6 @@ SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));) SCM_SNARF_HERE(scm_t_bits tag) \ SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));) -#define SCM_SMOB_MARK(tag, c_name, arg) \ -SCM_SNARF_HERE(static SCM c_name(SCM arg)) \ -SCM_SNARF_INIT(scm_set_smob_mark((tag), (c_name));) - -#define SCM_GLOBAL_SMOB_MARK(tag, c_name, arg) \ -SCM_SNARF_HERE(SCM c_name(SCM arg)) \ -SCM_SNARF_INIT(scm_set_smob_mark((tag), (c_name));) - #define SCM_SMOB_FREE(tag, c_name, arg) \ SCM_SNARF_HERE(static size_t c_name(SCM arg)) \ SCM_SNARF_INIT(scm_set_smob_free((tag), (c_name));) @@ -121,39 +111,9 @@ SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));) -SCM_API SCM scm_i_new_smob (scm_t_bits tc, scm_t_bits); -SCM_API SCM scm_i_new_double_smob (scm_t_bits tc, scm_t_bits, - scm_t_bits, scm_t_bits); - - -SCM_INLINE SCM scm_new_smob (scm_t_bits tc, scm_t_bits); -SCM_INLINE SCM scm_new_double_smob (scm_t_bits tc, scm_t_bits, - scm_t_bits, scm_t_bits); - -#if SCM_CAN_INLINE || defined SCM_INLINE_C_IMPLEMENTING_INLINES -SCM_INLINE_IMPLEMENTATION SCM -scm_new_smob (scm_t_bits tc, scm_t_bits data) -{ - scm_t_bits smobnum = SCM_TC2SMOBNUM (tc); - - if (SCM_UNLIKELY (scm_smobs[smobnum].mark || scm_smobs[smobnum].free)) - return scm_i_new_smob (tc, data); - else - return scm_cell (tc, data); -} - -SCM_INLINE_IMPLEMENTATION SCM -scm_new_double_smob (scm_t_bits tc, scm_t_bits data1, - scm_t_bits data2, scm_t_bits data3) -{ - scm_t_bits smobnum = SCM_TC2SMOBNUM (tc); - - if (SCM_UNLIKELY (scm_smobs[smobnum].mark || scm_smobs[smobnum].free)) - return scm_i_new_double_smob (tc, data1, data2, data3); - else - return scm_double_cell (tc, data1, data2, data3); -} -#endif +SCM_API SCM scm_new_smob (scm_t_bits tc, scm_t_bits); +SCM_API SCM scm_new_double_smob (scm_t_bits tc, scm_t_bits, + scm_t_bits, scm_t_bits); #define SCM_NEWSMOB(z, tc, data) \ z = scm_new_smob ((tc), (scm_t_bits)(data)) @@ -222,22 +182,18 @@ scm_new_double_smob (scm_t_bits tc, scm_t_bits data1, -SCM_API SCM scm_mark0 (SCM ptr); -SCM_API SCM scm_markcdr (SCM ptr); -SCM_API size_t scm_free0 (SCM ptr); 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 * SMOB types. * * Create a type tag using `scm_make_smob_type', accept default values - * for mark, free, print and/or equalp functions, or set your own + * for free, print and/or equalp functions, or set your own * values using `scm_set_smob_xxx'. */ SCM_API scm_t_bits scm_make_smob_type (char const *name, size_t size); -SCM_API void scm_set_smob_mark (scm_t_bits tc, SCM (*mark) (SCM)); SCM_API void scm_set_smob_free (scm_t_bits tc, size_t (*free) (SCM)); SCM_API void scm_set_smob_print (scm_t_bits tc, int (*print) (SCM, SCM, scm_print_state*)); |