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);
/*
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;
}
/*
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 ());
}
/*
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;