]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/spanner.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / spanner.cc
index c01ac14165eebbd16ea6f47557338d2e59c78cc4..f73657afe184bfec6820190186c53759d0c04458 100644 (file)
@@ -26,8 +26,6 @@
 #include "system.hh"
 #include "warn.hh"
 
-using std::vector;
-
 Grob *
 Spanner::clone () const
 {
@@ -226,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;
 }
 
 /*
@@ -343,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 ());
 }
 
 /*
@@ -451,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;