X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Flily-guile.hh;h=e447afb5b1b356f5e638055db73a2fbabf2f0e70;hb=d765f3af45be51f15da55cf570a4b172200e1035;hp=105c1030f0b13ea7ba18903e47f9d72650b85f7e;hpb=86ae245eef3d991483f27f135ded2c9bc29043f3;p=lilypond.git diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 105c1030f0..e447afb5b1 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -48,6 +48,7 @@ #define fix_guile_1_4_scm_primitive_eval(form) scm_eval_3 (form, 1, SCM_EOL) #define scm_primitive_eval(form) fix_guile_1_4_scm_primitive_eval (form) +#define scm_int2num(x) scm_long2num (x) #define scm_current_module() (SCM)0 #define scm_set_current_module(x) (void)x #define scm_c_resolve_module(x) (SCM)0 @@ -57,7 +58,7 @@ inline SCM scm_c_make_vector (int k, SCM val) { } #define scm_c_define_gsubr scm_make_gsubr #define scm_c_eval_string(str) gh_eval_str ((char*)str) - +#define scm_remember_upto_here_1(s) scm_remember (&s) #define scm_gc_protect_object scm_protect_object #define scm_gc_unprotect_object scm_unprotect_object #define scm_list_n scm_listify @@ -67,8 +68,15 @@ inline SCM scm_c_make_vector (int k, SCM val) { #define SCM_SYMBOL_LENGTH SCM_LENGTH #define SCM_VECTOR_LENGTH SCM_LENGTH +#define SMOB_FREE_RETURN_VAL(CL) sizeof(CL) +#define scm_done_free(x) +#endif + +#ifndef SMOB_FREE_RETURN_VAL +#define SMOB_FREE_RETURN_VAL(CL) 0 #endif + #if GUILE_MINOR_VERSION < 7 #define scm_gc_unregister_collectable_memory(a,b,c) scm_done_free(b) #define scm_gc_register_collectable_memory(a,b,c) scm_done_malloc(b) @@ -92,12 +100,17 @@ inline SCM scm_c_make_vector (int k, SCM val) { */ SCM ly_last (SCM list); -SCM ly_str02scm (char const*c); SCM ly_write2scm (SCM s); SCM ly_deep_copy (SCM); SCM ly_truncate_list (int k, SCM l ); +/* + Unreliable on gcc2 + */ +// #define CACHE_SYMBOLS + + #if (__GNUC__ > 2) /* todo: should add check for x86 as well @@ -106,13 +119,6 @@ SCM ly_truncate_list (int k, SCM l ); #endif -/* - We don't use gh_symbol2scm directly, since it has const-correctness - problems in GUILE 1.3.4 - - */ -SCM my_gh_symbol2scm (const char* x); - #ifdef CACHE_SYMBOLS @@ -129,12 +135,12 @@ SCM my_gh_symbol2scm (const char* x); SCM value = cached; /* We store this one locally, since G++ -O2 fucks up else */ \ if ( __builtin_constant_p ((x)))\ { if (!cached)\ - value = cached = scm_gc_protect_object (my_gh_symbol2scm((x)));\ + value = cached = scm_gc_protect_object (gh_symbol2scm((x)));\ } else\ value = gh_symbol2scm ((char*) (x)); \ value; }) #else -inline SCM ly_symbol2scm(char const* x) { return my_gh_symbol2scm((x)); } +inline SCM ly_symbol2scm(char const* x) { return gh_symbol2scm((x)); } #endif @@ -146,19 +152,19 @@ Offset ly_scm2offset (SCM); SCM ly_assoc_chain (SCM key, SCM achain); SCM ly_assoc_cdr (SCM key, SCM alist); Interval ly_scm2interval (SCM); +Slice int_list_to_slice (SCM l); SCM ly_interval2scm (Drul_array); -void taint (SCM *); -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) ; String print_scm_val (SCM val); SCM ly_number2string (SCM s); SCM parse_symbol_list (char const *); +SCM robust_list_ref(int i, SCM l); + inline SCM ly_cdr (SCM x) { return SCM_CDR (x); } inline SCM ly_car (SCM x) { return SCM_CAR (x); } @@ -182,7 +188,7 @@ inline bool ly_pair_p (SCM x) { return SCM_NFALSEP (scm_pair_p (x)); } #endif inline bool ly_symbol_p (SCM x) { return SCM_SYMBOLP (x); } inline bool ly_number_p (SCM x) { return SCM_NUMBERP (x); } -inline bool ly_procedure_p (SCM x) { return SCM_NFALSEP (scm_procedure_p(x)); } +inline bool ly_procedure_p (SCM x) { return SCM_NFALSEP (scm_procedure_p (x)); } /* display and print newline. @@ -194,7 +200,7 @@ void ly_display_scm (SCM s); #include "array.hh" void read_lily_scm_file (String); -void init_lily_guile (String dir); +void ly_init_guile (); bool ly_dir_p (SCM s); bool ly_number_pair_p (SCM); @@ -269,22 +275,28 @@ public:\ } _ ## name ## _scm_initter; \ /* end define */ -#define LY_DEFINE(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ -SCM FNAME ARGLIST ; \ +#define LY_DEFINE_WITHOUT_DECL(INITPREFIX, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ SCM FNAME ## _proc;\ void \ -FNAME ## init ()\ +INITPREFIX ## init ()\ {\ FNAME ## _proc \ = scm_c_define_gsubr (PRIMNAME,REQ, OPT, VAR, (Scheme_function_unknown) FNAME);\ ly_add_function_documentation (PRIMNAME, #ARGLIST, DOCSTRING);\ }\ -ADD_SCM_INIT_FUNC (FNAME ## init_unique_prefix, FNAME ## init);\ +ADD_SCM_INIT_FUNC (INITPREFIX ## init_unique_prefix, INITPREFIX ## init);\ SCM \ FNAME ARGLIST\ +#define LY_DEFINE(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ +SCM FNAME ARGLIST ; \ +LY_DEFINE_WITHOUT_DECL(FNAME, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) +#define LY_DEFINE_MEMBER_FUNCTION(CLASS, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ +SCM FNAME ARGLIST ; \ +LY_DEFINE_WITHOUT_DECL(CLASS ## FNAME, CLASS::FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) + -#endif // LILY_GUILE_HH +#endif /* LILY_GUILE_HH */