ly_scm_write_string (SCM s)
{
SCM port = scm_mkstrport (SCM_INUM0,
ly_scm_write_string (SCM s)
{
SCM port = scm_mkstrport (SCM_INUM0,
// SCM write = scm_eval_3 (ly_symbol2scm ("write"), s, SCM_EOL);
SCM write = scm_primitive_eval (ly_symbol2scm ("write"));
// SCM write = scm_eval_3 (ly_symbol2scm ("write"), s, SCM_EOL);
SCM write = scm_primitive_eval (ly_symbol2scm ("write"));
- SCM str = scm_symbol_to_string (s);
- return ly_scm2string (str);
+ return ly_scm2string (scm_symbol_to_string (s));
+}
+
+string
+robust_symbol2string (SCM sym, string str)
+{
+ return scm_is_symbol (sym) ? ly_symbol2string (sym) : str;
- {
- string e = _f ("cannot find file: `%s'", fn);
- e += " ";
- e += _f ("(load path: `%s')", global_path.to_string ());
- error (e);
- /* unreachable */
- }
+ {
+ string e = _f ("cannot find file: `%s'", fn);
+ e += " ";
+ e += _f ("(load path: `%s')", global_path.to_string ());
+ error (e);
+ /* unreachable */
+ }
vector<char> chars = gulp_file (s, size);
string result (&chars[0], chars.size ());
vector<char> chars = gulp_file (s, size);
string result (&chars[0], chars.size ());
ly_string2scm (string const &str)
{
return scm_from_locale_stringn (str.c_str (),
ly_string2scm (string const &str)
{
return scm_from_locale_stringn (str.c_str (),
-
-bool
-alist_equal_p (SCM a, SCM b)
-{
- for (SCM s = a;
- scm_is_pair (s); s = scm_cdr (s))
- {
- SCM key = scm_caar (s);
- SCM val = scm_cdar (s);
- SCM l = scm_assoc (key, b);
-
- if (l == SCM_BOOL_F
- || !ly_is_equal (scm_cdr (l), val))
-
- return false;
- }
- return true;
-}
-
{
int len = scm_c_vector_length (src);
SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
{
int len = scm_c_vector_length (src);
SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
- for (int i = 0;i < len; i++)
- {
- SCM si = scm_from_int (i);
- scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
- }
+ for (int i = 0; i < len; i++)
+ {
+ SCM si = scm_from_int (i);
+ scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
+ }
string realval = ly_scm_write_string (val);
if (realval.length () > 200)
realval = realval.substr (0, 100)
string realval = ly_scm_write_string (val);
if (realval.length () > 200)
realval = realval.substr (0, 100)
if (type != SCM_EOL && !ly_is_procedure (type))
{
warning (_f ("cannot find property type-check for `%s' (%s).",
if (type != SCM_EOL && !ly_is_procedure (type))
{
warning (_f ("cannot find property type-check for `%s' (%s).",
- ly_symbol2string (sym).c_str (),
- ly_symbol2string (type_symbol).c_str ())
- + " " + _ ("perhaps a typing error?"));
+ ly_symbol2string (sym).c_str (),
+ ly_symbol2string (type_symbol).c_str ())
+ + " " + _ ("perhaps a typing error?"));
- && ly_is_procedure (type)
- && scm_call_1 (type, val) == SCM_BOOL_F)
- {
- ok = false;
- SCM typefunc = ly_lily_module_constant ("type-name");
- SCM type_name = scm_call_1 (typefunc, 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");
- }
+ && ly_is_procedure (type)
+ && scm_call_1 (type, val) == SCM_BOOL_F)
+ {
+ ok = false;
+ SCM typefunc = ly_lily_module_constant ("type-name");
+ SCM type_name = scm_call_1 (typefunc, 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");
+ }
- || !ly_is_equal (scm_car (i), scm_cadr (i)))
- unique = scm_cons (scm_car (i), unique);
+ || !ly_is_equal (scm_car (i), scm_cadr (i)))
+ unique = scm_cons (scm_car (i), unique);
/* Split list at member s, removing s.
Return (BEFORE . AFTER) */
SCM
/* Split list at member s, removing s.
Return (BEFORE . AFTER) */
SCM
before = scm_cons (i, before);
}
return scm_cons (scm_reverse_x (before, SCM_EOL), after);
before = scm_cons (i, before);
}
return scm_cons (scm_reverse_x (before, SCM_EOL), after);
+vector<Real>
+ly_scm2floatvector (SCM l)
+{
+ vector<Real> floats;
+ for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
+ floats.push_back (robust_scm2double (scm_car (s), 0.0));
+ return floats;
+}
+
+SCM
+ly_floatvector2scm (vector<Real> v)
+{
+ SCM l = SCM_EOL;
+ SCM *tail = &l;
+ for (vsize i = 0; i < v.size (); i++)
+ {
+ *tail = scm_cons (scm_from_double (v[i]), SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
+ }
+ return l;
+}
SCM
ly_rational2scm (Rational r)
{
return scm_divide (scm_from_int64 (r.numerator ()),
SCM
ly_rational2scm (Rational r)
{
return scm_divide (scm_from_int64 (r.numerator ()),
replace_all (&cxx_id, "__", "::");
replace_all (&cxx_id, '_', '-');
replace_all (&cxx_id, "__", "::");
replace_all (&cxx_id, '_', '-');