SCM ctor = m->get_property ("iterator-ctor") ;
SCM iter = SCM_EOL;
- if (gh_procedure_p (ctor))
+ if (is_procedure (ctor))
{
- iter = gh_call0 (ctor);
+ iter = scm_call_0 (ctor);
p = unsmob_iterator (iter);
}
else
assert (m);
p->music_length_ = m->get_length ();
p->start_mom_ = m->start_mom ();
+
return iter;
}
}
/*
- TODO: rename to prevent confusion between Translator::try_music and
+ TODO: rename to prevent confusion between Context::try_music and
Iterator::try_music
*/
{
return false;
}
+
+
+bool
+is_child_context (Context *me, Context *child)
+{
+ while (child && child != me)
+ {
+ child = child->daddy_context_;
+ }
+
+ return child == me;
+}
+
+/*
+ move to context of child iterator if it is deeper down in the
+ hierarchy.
+ */
+void
+Music_iterator::descend_to_child (Context * child_report)
+{
+ Context * me_report = get_outlet ();
+ if (is_child_context (me_report, child_report))
+ set_translator (child_report);
+}