Score_element::~Score_element()
{
- delete output_p_;
+ assert (!output_p_);
assert (status_i_ >=0);
status_i_ = -1;
}
SCM s = scm_assq(sym, element_property_alist_);
// is this a good idea?
- if (s == SCM_BOOL_F && pscore_l_ && pscore_l_->paper_l_)
- s = pscore_l_->paper_l_->get_scm_var (sym);
+ if (s != SCM_BOOL_F)
+ return s;
- return s;
+ if (pscore_l_)
+ {
+ // should probably check for Type::sym as well.
+ if (pscore_l_->paper_l_->default_properties_.elem_b (sym))
+ return pscore_l_->paper_l_->default_properties_[sym];
+ }
+
+ return SCM_BOOL_F;
}
SCM
return 0;
}
-static scm_smobfuns score_elt_funs = {
- Score_element::mark_smob, Score_element::free_smob,
- Score_element::print_smob, 0,
-};
-
-
-SCM
-Score_element::smobify_self ()
-{
- if (self_scm_ != SCM_EOL)
- return self_scm_;
-
- SCM s;
- SCM_NEWCELL(s);
- SCM_SETCAR(s,smob_tag);
- void * me_p = this;
- SCM_SETCDR(s,me_p);
- scm_protect_object (s);
- self_scm_ = s;
-
- scm_unprotect_object (element_property_alist_); // ugh
- return s;
-}
-
SCM
Score_element::mark_smob (SCM ses)
{
return s->element_property_alist_;
}
-scm_sizet
-Score_element::free_smob (SCM ses)
-{
- Score_element * s = (Score_element*) SCM_CDR(ses);
- delete s;
- return 0;
-}
int
Score_element::print_smob (SCM s, SCM port, scm_print_state *)
return 1;
}
-long Score_element::smob_tag;
-
void
-Score_element::init_smobs ()
+Score_element::do_smobify_self ()
{
- smob_tag = scm_newsmob (&score_elt_funs);
+ scm_unprotect_object (element_property_alist_); // ugh
}
+#include "ly-smobs.icc"
+IMPLEMENT_SMOBS(Score_element);
-void
-init_smobs()
+SCM
+Score_element::equal_p (SCM a, SCM b)
{
- Score_element::init_smobs ();
+ return SCM_CDR(a) == SCM_CDR(b) ? SCM_BOOL_T : SCM_BOOL_F;
}