X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-guile.cc;h=f37380f024fc4b65fc9b368564c26dd3dd4a3190;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=6f7bf37f709f072594426b884827e0e2cd9b2515;hpb=e8d5061834a5a658c5ffd078237e9cd660069a7d;p=lilypond.git diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 6f7bf37f70..f37380f024 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -40,6 +40,7 @@ using namespace std; #include "source-file.hh" #include "version.hh" #include "warn.hh" +#include "lily-imports.hh" /* symbols/strings. @@ -436,8 +437,7 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol) && ly_is_procedure (type) && scm_is_false (scm_call_1 (type, val))) { - SCM typefunc = ly_lily_module_constant ("type-name"); - SCM type_name = scm_call_1 (typefunc, type); + SCM type_name = Lily::type_name (type); warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'", ly_symbol2string (sym).c_str (), @@ -449,6 +449,23 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol) return true; } +void +ly_wrong_smob_arg (bool pred (SCM), SCM var, int number, const char *fun) +{ + string type = predicate_to_typename ((void *) pred); + if (pred (var)) + { + // Uh oh. unsmob delivered 0, yet + // unsmob delivers true. This means that unsmob is a + // matching check from a base class of T, but var is of an + // incompatible derived type. + type = string (_ ("Wrong kind of ")).append (type); + } + scm_wrong_type_arg_msg (mangle_cxx_identifier (fun).c_str (), + number, var, type.c_str ()); +} + + /* some SCM abbrevs zijn deze nou handig? @@ -512,6 +529,18 @@ display_list (SCM s) return SCM_UNSPECIFIED; } +// Needed as complement to int_list_to_slice since scm_c_memq refuses +// to work with dotted lists. + +SCM +ly_memv (SCM v, SCM l) +{ + for (; scm_is_pair (l); l = scm_cdr (l)) + if (scm_is_true (scm_eqv_p (v, scm_car (l)))) + return l; + return SCM_BOOL_F; +} + Slice int_list_to_slice (SCM l) { @@ -655,8 +684,7 @@ alist_to_hashq (SCM alist) SCM ly_hash2alist (SCM tab) { - SCM func = ly_lily_module_constant ("hash-table->alist"); - return scm_call_1 (func, tab); + return Lily::hash_table_to_alist (tab); } /*