From a7646e7a00e1fe86e4f52123049f20fd28b48739 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 26 Jan 2007 01:34:03 +0100 Subject: [PATCH] check for calculation-in-progress marker in get_property(). --- lily/accidental-placement.cc | 2 ++ lily/align-interface.cc | 3 +++ lily/break-alignment-interface.cc | 3 +++ lily/dot-column.cc | 3 +++ lily/grob-property.cc | 10 +++++++++- lily/grob.cc | 2 +- lily/note-collision.cc | 4 +++- lily/rest-collision.cc | 3 +++ lily/semi-tie-column.cc | 4 +++- lily/stem.cc | 2 ++ lily/tie-column.cc | 3 +++ 11 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index cbc1478608..15049f5bc0 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -251,6 +251,8 @@ Accidental_placement::calc_positioning_done (SCM smob) if (!me->is_live ()) return SCM_BOOL_T; + me->set_property ("positioning-done", SCM_BOOL_T); + SCM accs = me->get_object ("accidental-grobs"); if (!scm_is_pair (accs)) return SCM_BOOL_T; diff --git a/lily/align-interface.cc b/lily/align-interface.cc index fc62e45eb3..09887a7c9f 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -30,6 +30,9 @@ SCM Align_interface::calc_positioning_done (SCM smob) { Grob *me = unsmob_grob (smob); + + me->set_property ("positioning-done", SCM_BOOL_T); + SCM axis = scm_car (me->get_property ("axes")); Axis ax = Axis (scm_to_int (axis)); diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 61eca90ab6..c2c3354349 100644 --- a/lily/break-alignment-interface.cc +++ b/lily/break-alignment-interface.cc @@ -93,6 +93,9 @@ Break_alignment_interface::calc_positioning_done (SCM smob) Grob *grob = unsmob_grob (smob); Item *me = dynamic_cast (grob); + + me->set_property ("positioning-done", SCM_BOOL_T); + vector elems = ordered_elements (me); vector extents; diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 173a9ad981..b2ff0308fa 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -213,6 +213,9 @@ SCM Dot_column::calc_positioning_done (SCM smob) { Grob *me = unsmob_grob (smob); + + me->set_property ("positioning-done", SCM_BOOL_T); + vector dots = extract_grob_array (me, "dots"); diff --git a/lily/grob-property.cc b/lily/grob-property.cc index b62a6bb9f9..0a4e1a669f 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -149,6 +149,14 @@ SCM Grob::internal_get_property (SCM sym) const { SCM val = get_property_data (sym); + +#ifndef NDEBUG + if (val == ly_symbol2scm ("calculation-in-progress")) + programming_error (_f ("cyclic dependency: calculation-in-progress encountered for #'%s (%s)", + ly_symbol2string (sym).c_str (), + name().c_str ())); +#endif + if (ly_is_procedure (val) || is_simple_closure (val)) { @@ -203,7 +211,7 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc) */ if (value == SCM_UNSPECIFIED) { - value = internal_get_property (sym); + value = get_property_data (sym); assert (value == SCM_EOL || value == marker); if (value == marker) *alist = scm_assq_remove_x (*alist, marker); diff --git a/lily/grob.cc b/lily/grob.cc index 1941d7d2f8..e12152821b 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -394,7 +394,7 @@ Grob::extent (Grob *refp, Axis a) const (a == X_AXIS) ? ly_symbol2scm ("X-extent") : ly_symbol2scm ("Y-extent"); - + SCM ext = internal_get_property (ext_sym); if (is_number_pair (ext)) real_ext.unite (ly_scm2interval (ext)); diff --git a/lily/note-collision.cc b/lily/note-collision.cc index 7d92a76ec0..488d77f1b7 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -323,7 +323,9 @@ MAKE_SCHEME_CALLBACK(Note_collision_interface, calc_positioning_done, 1) SCM Note_collision_interface::calc_positioning_done (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = unsmob_grob (smob); + me->set_property ("positioning-done", SCM_BOOL_T); + Drul_array > cg = get_clash_groups (me); Direction d = UP; diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index b8ad86ba91..8ba0d49c7b 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -92,6 +92,9 @@ SCM Rest_collision::calc_positioning_done (SCM smob) { Grob *me = unsmob_grob (smob); + + me->set_property ("positioning-done", SCM_BOOL_T); + extract_grob_set (me, "elements", elts); vector rests; diff --git a/lily/semi-tie-column.cc b/lily/semi-tie-column.cc index c7d44a9568..ee18953aef 100644 --- a/lily/semi-tie-column.cc +++ b/lily/semi-tie-column.cc @@ -39,7 +39,9 @@ SCM Semi_tie_column::calc_positioning_done (SCM smob) { Grob *me = unsmob_grob (smob); - + + me->set_property ("positioning-done", SCM_BOOL_T); + extract_grob_set (me, "ties", lv_ro_ties); vector lv_ties (lv_ro_ties); diff --git a/lily/stem.cc b/lily/stem.cc index 7c369e4bb0..dc7c82e91b 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -410,6 +410,8 @@ Stem::calc_positioning_done (SCM smob) if (!head_count (me)) return SCM_BOOL_T; + me->set_property ("positioning-done", SCM_BOOL_T); + extract_grob_set (me, "note-heads", ro_heads); vector heads (ro_heads); vector_sort (heads, position_less); diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 9eefbbf8ee..b54428d986 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -79,6 +79,9 @@ Tie_column::calc_positioning_done (SCM smob) if (!ties.size ()) return SCM_BOOL_T; + + me->set_property ("positioning-done", SCM_BOOL_T); + vector_sort (ties, Tie::less); Tie_formatting_problem problem; -- 2.39.5