-#define DEFINE_WRAPPED_TYPE(TYPE, PRINT_NAME, INIT, PRED, WRAP, UNWRAP) \
- static SCM wrapped_type; \
- \
- void \
- INIT (void) \
- { \
- SCM name, slots; \
- scm_t_struct_finalize finalizer; \
- \
- name = scm_from_utf8_symbol (PRINT_NAME); \
- slots = scm_list_1 (scm_from_utf8_symbol ("data")); \
- finalizer = NULL; \
- \
- wrapped_type = \
- scm_make_foreign_object_type (name, slots, finalizer); \
- } \
- \
- SCM \
- WRAP (TYPE foreign_obj) \
- { \
- return scm_make_foreign_object_1 (wrapped_type, foreign_obj); \
- } \
- \
- TYPE \
- UNWRAP (SCM wrapped_obj) \
- { \
- scm_assert_foreign_object_type (wrapped_type, wrapped_obj); \
- return (TYPE)scm_foreign_object_ref (wrapped_obj, 0); \
- } \
- \
- bool \
- PRED (SCM wrapped_obj) \
- { \
- return SCM_IS_A_P (wrapped_obj, wrapped_type); \
- }