From 0a5768354b85264bc474baff8752f2c3e205cbe2 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Thu, 6 Apr 2017 09:50:24 +0200 Subject: [PATCH] Issue 5116/1: Allow \change to same context type The \change command no longer refuses to change the parent of a context when the context itself would be of the proper type to change to. This allows changing the parent of a context that could be nested, like StaffGroup in StaffGroup or NullVoice in Staff (since NullVoice is also aliased to Staff). --- lily/change-iterator.cc | 8 ++------ lily/context.cc | 11 ++++++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index 0f8823d484..f70c2da47f 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -68,13 +68,9 @@ Change_iterator::change_to (Music_iterator &it, } else if (it.get_outlet ()->is_alias (to_type)) { - // No enclosing context was found because the iterator's immediate - // context is the kind that was sought. - /* We could change the current translator's id, but that would make - errors hard to catch. + // No enclosing context of the right kind was found + // and the iterator's immediate context is the kind that was sought. - last->translator_id_string () = get_change - ()->change_to_id_string (); */ result = _f ("not changing to same context type: %s", ly_symbol2string (to_type).c_str ()); } else diff --git a/lily/context.cc b/lily/context.cc index 7dce3857ce..9e99577019 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -674,11 +674,12 @@ find_context_above (Context *where, SCM type) Context * find_context_above_by_parent_type (Context *where, SCM parent_type) { - for (Context *child = 0; where; - child = where, where = where->get_parent_context ()) - if (where->is_alias (parent_type)) - return child; - + while (Context *parent = where->get_parent_context ()) + { + if (parent->is_alias (parent_type)) + return where; + where = parent; + } return 0; } -- 2.39.2