]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/spanner.cc
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / lily / spanner.cc
index 087331ab9ffabae48dfd45883b8226b204b67228..f73657afe184bfec6820190186c53759d0c04458 100644 (file)
@@ -210,7 +210,7 @@ Spanner::set_bound (Direction d, Grob *s)
       original parent for alignment.
       This happens e.g. for MultiMeasureRestNumbers and PercentRepeatCounters.
     */
-    if (!dynamic_cast <Spanner *> (this->get_parent (X_AXIS)))
+    if (!dynamic_cast <Spanner *> (get_parent (X_AXIS)))
       set_parent (i, X_AXIS);
 
   /*
@@ -224,19 +224,22 @@ Spanner::set_bound (Direction d, Grob *s)
     Pointer_group_interface::add_grob (i, ly_symbol2scm ("bounded-by-me"), this);
 }
 
+Preinit_Spanner::Preinit_Spanner ()
+{
+  spanned_drul_.set (0, 0);
+  pure_property_cache_ = SCM_UNDEFINED;
+}
+
 Spanner::Spanner (SCM s)
   : Grob (s)
 {
   break_index_ = 0;
-  spanned_drul_.set (0, 0);
-  pure_property_cache_ = SCM_UNDEFINED;
 }
 
 Spanner::Spanner (Spanner const &s)
   : Grob (s)
 {
-  spanned_drul_.set (0, 0);
-  pure_property_cache_ = SCM_UNDEFINED;
+  break_index_ = 0;
 }
 
 /*
@@ -341,8 +344,11 @@ Spanner::derived_mark () const
       scm_gc_mark (spanned_drul_[d]->self_scm ());
   ;
 
-  for (vsize i = broken_intos_.size (); i--;)
-    scm_gc_mark (broken_intos_[i]->self_scm ());
+  // If break_index_ is -1, broken_intos_ might not yet have run its
+  // constructor and any access might break things.
+  if (break_index_ != (vsize)-1)
+    for (vsize i = broken_intos_.size (); i--;)
+      scm_gc_mark (broken_intos_[i]->self_scm ());
 }
 
 /*
@@ -449,11 +455,8 @@ Spanner::calc_normalized_endpoints (SCM smob)
       Real total_width = 0.0;
       vector<Real> span_data;
 
-      if (!orig->is_broken ())
-        span_data.push_back (orig->spanner_length ());
-      else
-        for (vsize i = 0; i < orig->broken_intos_.size (); i++)
-          span_data.push_back (orig->broken_intos_[i]->spanner_length ());
+      for (vsize i = 0; i < orig->broken_intos_.size (); i++)
+        span_data.push_back (orig->broken_intos_[i]->spanner_length ());
 
       vector<Interval> unnormalized_endpoints;