diff --git a/libguile/smob.h b/libguile/smob.h index 5cbc6002f..410abcba5 100644 --- a/libguile/smob.h +++ b/libguile/smob.h @@ -28,6 +28,7 @@ #include #include #include "libguile/print.h" +#include @@ -69,6 +70,57 @@ SCM_API long scm_numsmob; SCM_API scm_smob_descriptor scm_smobs[]; + + +#define SCM_SMOB(tag, scheme_name, size) \ +SCM_SNARF_HERE(static scm_t_bits tag) \ +SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));) + +#define SCM_GLOBAL_SMOB(tag, 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));) + +#define SCM_GLOBAL_SMOB_FREE(tag, c_name, arg) \ +SCM_SNARF_HERE(size_t c_name(SCM arg)) \ +SCM_SNARF_INIT(scm_set_smob_free((tag), (c_name));) + +#define SCM_SMOB_PRINT(tag, c_name, obj, port, pstate) \ +SCM_SNARF_HERE(static int c_name(SCM obj, SCM port, scm_print_state* pstate)) \ +SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));) + +#define SCM_GLOBAL_SMOB_PRINT(tag, c_name, obj, port, pstate) \ +SCM_SNARF_HERE(int c_name(SCM obj, SCM port, scm_print_state* pstate)) \ +SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));) + +#define SCM_SMOB_EQUALP(tag, c_name, obj1, obj2) \ +SCM_SNARF_HERE(static SCM c_name(SCM obj1, SCM obj2)) \ +SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));) + +#define SCM_GLOBAL_SMOB_EQUALP(tag, c_name, obj1, obj2) \ +SCM_SNARF_HERE(SCM c_name(SCM obj1, SCM obj2)) \ +SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));) + +#define SCM_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \ +SCM_SNARF_HERE(static SCM c_name arglist) \ +SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));) + +#define SCM_GLOBAL_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \ +SCM_SNARF_HERE(SCM c_name arglist) \ +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); diff --git a/libguile/snarf.h b/libguile/snarf.h index 5aa4f1dfa..309014835 100644 --- a/libguile/snarf.h +++ b/libguile/snarf.h @@ -85,54 +85,6 @@ DOCSTRING ^^ } # endif #endif -#define SCM_SMOB(tag, scheme_name, size) \ -SCM_SNARF_HERE(static scm_t_bits tag) \ -SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));) - -#define SCM_GLOBAL_SMOB(tag, 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));) - -#define SCM_GLOBAL_SMOB_FREE(tag, c_name, arg) \ -SCM_SNARF_HERE(size_t c_name(SCM arg)) \ -SCM_SNARF_INIT(scm_set_smob_free((tag), (c_name));) - -#define SCM_SMOB_PRINT(tag, c_name, obj, port, pstate) \ -SCM_SNARF_HERE(static int c_name(SCM obj, SCM port, scm_print_state* pstate)) \ -SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));) - -#define SCM_GLOBAL_SMOB_PRINT(tag, c_name, obj, port, pstate) \ -SCM_SNARF_HERE(int c_name(SCM obj, SCM port, scm_print_state* pstate)) \ -SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));) - -#define SCM_SMOB_EQUALP(tag, c_name, obj1, obj2) \ -SCM_SNARF_HERE(static SCM c_name(SCM obj1, SCM obj2)) \ -SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));) - -#define SCM_GLOBAL_SMOB_EQUALP(tag, c_name, obj1, obj2) \ -SCM_SNARF_HERE(SCM c_name(SCM obj1, SCM obj2)) \ -SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));) - -#define SCM_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \ -SCM_SNARF_HERE(static SCM c_name arglist) \ -SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));) - -#define SCM_GLOBAL_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \ -SCM_SNARF_HERE(SCM c_name arglist) \ -SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));) - /* Low-level snarfing for static memory allocation. */