+
+ /*
+ Always succeeds.
+
+
+ TODO: should remove #f from allowed vals?
+ */
+ if (scm_is_null (val) || scm_is_false (val))
+ return true;
+
+ if (!scm_is_null (val)
+ && ly_is_procedure (type)
+ && scm_is_false (scm_call_1 (type, val)))
+ {
+ 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 (),
+ print_scm_val (val),
+ ly_scm2string (type_name).c_str ()));
+ progress_indication ("\n");
+ return false;
+ }
+ 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))