source file of the GNU LilyPond music typesetter
- (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
/*
symbols/strings.
*/
-SCM
-ly_to_symbol (SCM scm)
-{
- return scm_string_to_symbol (ly_to_string (scm));
-}
-
-SCM
-ly_to_string (SCM scm)
-{
- return scm_call_3 (ly_lily_module_constant ("format"), SCM_BOOL_F,
-
- scm_from_locale_string ("~S"), scm);
-}
-
-SCM
-ly_write2scm (SCM s)
+string
+ly_scm_write_string (SCM s)
{
SCM port = scm_mkstrport (SCM_INUM0,
scm_make_string (SCM_INUM0, SCM_UNDEFINED),
// scm_apply (write, port, SCM_EOL);
scm_call_2 (write, s, port);
- return scm_strport_to_string (port);
+ return ly_scm2string (scm_strport_to_string (port));
}
SCM
char *
ly_scm2newstr (SCM str, size_t *lenp)
{
- SCM_ASSERT_TYPE (scm_is_string (str), str, SCM_ARG1, __FUNCTION__, "string");
+ LY_ASSERT_TYPE (scm_is_string, str, 1);
size_t len = scm_i_string_length (str);
if (char *new_str = (char *) malloc ((len + 1) * sizeof (char)))
return src;
}
-
-
-
-
string
print_scm_val (SCM val)
{
- string realval = ly_scm2string (ly_write2scm (val));
+ string realval = ly_scm_write_string (val);
if (realval.length () > 200)
realval = realval.substr (0, 100)
+ "\n :\n :\n"
/* Be strict when being anal :) */
if (do_internal_type_checking_global)
- abort ();
+ scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
+ sym, val));
warning (_ ("doing assignment anyway"));
}
scm_to_int (scm_denominator (r)));
}
+Rational
+robust_scm2rational (SCM n, Rational rat)
+{
+ if (ly_is_fraction (n))
+ return ly_scm2rational (n);
+ else
+ return rat;
+}
SCM
alist_to_hashq (SCM alist)
return scm_call_1 (func, tab);
}
-int
-procedure_arity (SCM proc)
-{
- assert (ly_is_procedure (proc));
- SCM arity = scm_procedure_property (proc,
- ly_symbol2scm ("arity"));
-
- SCM fixed = scm_car (arity);
- return scm_to_int (fixed);
-}
/*
C++ interfacing.
cxx_id = "ly:" + cxx_id;
}
if (cxx_id.substr (cxx_id.length () - 2) == "_p")
- cxx_id = cxx_id.replace (cxx_id.length () - 2, 1, "?");
+ cxx_id = cxx_id.replace (cxx_id.length () - 2, 2, "?");
else if (cxx_id.substr (cxx_id.length () - 2) == "_x")
- cxx_id = cxx_id.replace (cxx_id.length () - 2, 1, "!");
+ cxx_id = cxx_id.replace (cxx_id.length () - 2, 2, "!");
+ cxx_id = replace_all (cxx_id, "_less?", "<?");
+ cxx_id = replace_all (cxx_id, "_2_", "->");
+ cxx_id = replace_all (cxx_id, "__", "::");
cxx_id = replace_all (cxx_id, '_', '-');
+
+
return cxx_id;
}
return ly_string_array_to_scm (string_split (s, ' '));
}
-
-bool
-ly_is_fraction (SCM x)
-{
- return SCM_FRACTIONP(x);
-}
-
+/* GDB debugging. */
struct ly_t_double_cell
{
SCM a;