*/
SCM ly_str02scm (char const*c);
SCM ly_deep_copy (SCM);
-
-
SCM ly_symbol2scm (char const *);
String ly_scm2string (SCM s);
String ly_symbol2string (SCM);
SCM ly_offset2scm (Offset);
Offset ly_scm2offset (SCM);
-
+SCM ly_assoc_chain (SCM key, SCM achain);
Interval ly_scm2interval (SCM);
SCM ly_interval2scm (Interval);
SCM ly_parse_scm (char const* s, int* n);
SCM ly_quote_scm (SCM s);
SCM ly_type (SCM);
+bool type_check_assignment (SCM val, SCM sym, SCM type_symbol) ;
/*
display and print newline.
void add_scm_init_func (void (*)());
+typedef SCM(*Scheme_function_unknown)();
+
+#if __GNUC_MINOR__ >= 96
+typedef SCM(*Scheme_function_0)();
+typedef SCM(*Scheme_function_1)(SCM);
+typedef SCM(*Scheme_function_2)(SCM,SCM);
+#else
+typedef SCM(*Scheme_function_0)(...);
+typedef SCM(*Scheme_function_1)(...);
+typedef SCM(*Scheme_function_2)(...);
+#endif
+
+#define DECLARE_SCHEME_CALLBACK(NAME,ARGS) \
+ static SCM NAME ARGS; \
+ static SCM NAME ## _proc
-#define MAKE_SCHEME_CALLBACK(TYPE, FUNC) \
-static SCM TYPE ## _ ## FUNC ## _proc;\
+#define MAKE_SCHEME_CALLBACK(TYPE, FUNC, ARGCOUNT) \
+SCM TYPE :: FUNC ## _proc;\
void \
TYPE ## _ ## FUNC ## _init_functions () \
{ \
- TYPE ## _ ## FUNC ## _proc = gh_new_procedure1_0 (#TYPE "::" #FUNC, \
- (SCM(*)(...))TYPE :: FUNC); \
+ TYPE :: FUNC ## _proc = gh_new_procedure ## ARGCOUNT ## _0 (#TYPE "::" #FUNC, \
+ ((Scheme_function_ ## ARGCOUNT)TYPE :: FUNC)); \
} \
\
ADD_SCM_INIT_FUNC(TYPE ## _ ## FUNC ## _callback, TYPE ## _ ## FUNC ## _init_functions); \