+
+ if (current)
+ if (last)
+ {
+ Context *dest = 0;
+ Context *where = get_outlet ();
+ while (!dest && where)
+ {
+ dest = find_context_below (where, to_type, to_id);
+ where = where->get_parent_context ();
+ }
+
+ if (dest)
+ {
+ send_stream_event (last, "ChangeParent", get_music ()->origin (),
+ ly_symbol2scm ("context"), dest->self_scm ());
+ }
+ else
+ /* FIXME: constant error message. */
+ get_music ()->origin ()->warning (_ ("cannot find context to switch to"));
+ }
+ else
+ {
+ /* We could change the current translator's id, but that would make
+ errors hard to catch.
+
+ last->translator_id_string () = get_change
+ ()->change_to_id_string (); */
+ error (_f ("not changing to same context type: %s", ly_symbol2string (to_type).c_str ()));
+ }
+ else
+ /* FIXME: uncomprehensable message */
+ error (_ ("none of these in my family"));
+
+ Simple_music_iterator::process (m);