]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/score-element.cc
release: 1.3.1
[lilypond.git] / lily / score-element.cc
index 9282bfc0100c045c6128c51491ee3bb2cb15dcac..487a6c0d56bebb6d1612bf7e2d1d71a7271a8d07 100644 (file)
@@ -70,7 +70,7 @@ Score_element::Score_element (Score_element const&s)
 
 Score_element::~Score_element()
 {
-  delete output_p_; 
+  assert (!output_p_);
   assert (status_i_ >=0);
   status_i_  = -1;
 }
@@ -93,10 +93,17 @@ Score_element::get_elt_property (SCM sym) const
   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
@@ -435,30 +442,6 @@ Score_element::find_broken_piece (Line_of_score*) const
   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)
 {
@@ -469,13 +452,6 @@ 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 *)
@@ -488,16 +464,16 @@ 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;
 }