#include "input-smob.hh"
#include "music.hh"
#include "music-list.hh"
-#include "debug.hh"
+#include "warn.hh"
#include "pitch.hh"
#include "ly-smobs.icc"
Music::Music ()
{
+ self_scm_ = SCM_EOL;
immutable_property_alist_ = SCM_EOL;
mutable_property_alist_ = SCM_EOL;
smobify_self ();
Music::Music (Music const &m)
{
immutable_property_alist_ = m.immutable_property_alist_;
- SCM c =ly_deep_mus_copy (m.mutable_property_alist_);
- mutable_property_alist_ = c;
+ mutable_property_alist_ = SCM_EOL;
+ self_scm_ = SCM_EOL;
+ /*
+ First we smobify_self, then we copy over the stuff. If we don't,
+ stack vars that hold the copy might be optimized away, meaning
+ that they won't be protected from GC.
+ */
smobify_self ();
-
+ mutable_property_alist_ = ly_deep_mus_copy (m.mutable_property_alist_);
set_spot (*m.origin ());
}
Music::Music (SCM l)
{
+ self_scm_ = SCM_EOL;
immutable_property_alist_ = l;
mutable_property_alist_ = SCM_EOL;
smobify_self ();
void
print_alist (SCM a, SCM port)
{
- for (SCM s = a; gh_pair_p (s); s = ly_cdr (s))
+ /*
+ SCM_EOL -> catch malformed lists.
+ */
+ for (SCM s = a; s != SCM_EOL; s = ly_cdr (s))
{
scm_display (ly_caar (s), port);
scm_puts (" = ", port);
Pitch np = *p;
np.transpose (delta);
- if (abs (np.alteration_i_) > 2)
+ if (abs (np.alteration_) > 2)
{
warning (_f ("Transposition by %s makes accidental larger than two",
- delta.str ()));
+ delta.string ()));
}
set_mus_property ("pitch", np.smobbed_copy ());
void
Music::internal_set_mus_property (SCM s, SCM v)
{
-#ifndef NDEBUG
if (internal_type_checking_global_b)
- assert (type_check_assignment (s, v, ly_symbol2scm ("music-type?")));
-#endif
-
- mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
+ if (!type_check_assignment (s, v, ly_symbol2scm ("music-type?")))
+ abort ();
+
+ mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
}
+
+
#include "main.hh"
void
"Get the property @var{sym} of music expression @var{mus}.")
{
Music * sc = unsmob_music (mus);
- SCM_ASSERT_TYPE(sc, mus, SCM_ARG1, __FUNCTION__, "grob");
- SCM_ASSERT_TYPE(gh_symbol_p(sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
-
- return sc->internal_get_mus_property (sym);
+ SCM_ASSERT_TYPE(sc, mus, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE(gh_symbol_p (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+ return sc->internal_get_mus_property (sym);
}
LY_DEFINE(ly_set_mus_property,
- "ly-set-mus-property", 3, 0, 0,
+ "ly-set-mus-property!", 3, 0, 0,
(SCM mus, SCM sym, SCM val),
"Set property @var{sym} in music expression @var{mus} to @var{val}.")
{
Music * sc = unsmob_music (mus);
- SCM_ASSERT_TYPE(sc, mus, SCM_ARG1, __FUNCTION__, "grob");
- SCM_ASSERT_TYPE(gh_symbol_p(sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE(sc, mus, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE(gh_symbol_p (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
bool ok = type_check_assignment (sym, val, ly_symbol2scm ("music-type?"));
if (ok)
type does not yet offer many manipulations.
")
{
- SCM_ASSERT_TYPE(gh_string_p(type), type, SCM_ARG1, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE(gh_string_p (type), type, SCM_ARG1, __FUNCTION__, "string");
-
- SCM s = get_music (ly_scm2string (type))->self_scm ();
+ SCM s = make_music (ly_scm2string (type))->self_scm ();
scm_gc_unprotect_object (s);
return s;
SCM_ASSERT_TYPE(m, mus, SCM_ARG1, __FUNCTION__ ,"music");
const char * nm = classname (m);
- return ly_str02scm (nm);
+ return scm_makfrom0str (nm);
}
LY_DEFINE(ly_music_list_p,"music-list?", 1, 0, 0,
return SCM_BOOL_T;
}
ADD_MUSIC(Music);
+