From c155a9cfbbcd9ffcddbbb66fea31d203462cdab5 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sat, 9 Aug 2014 22:04:08 +0200 Subject: [PATCH] Use Context::here_defined to speed up some operations --- lily/accidental-engraver.cc | 2 +- lily/context-property.cc | 29 +++++++++++++++++------------ lily/property-iterator.cc | 16 ++++++---------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 5bc78357b2..af6ce5ee8e 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -131,7 +131,7 @@ Accidental_engraver::update_local_key_signature (SCM new_sig) */ SCM val; - while (trans && trans->where_defined (ly_symbol2scm ("localAlterations"), &val) == trans) + while (trans && trans->here_defined (ly_symbol2scm ("localAlterations"), &val)) { trans->set_property ("localAlterations", ly_deep_copy (last_keysig_)); trans = trans->get_parent_context (); diff --git a/lily/context-property.cc b/lily/context-property.cc index eb1eee2196..b578321a93 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -19,6 +19,7 @@ #include "context.hh" #include "engraver.hh" +#include "global-context.hh" #include "international.hh" #include "item.hh" #include "main.hh" @@ -78,18 +79,23 @@ execute_override_property (Context *context, { SCM current_context_val = SCM_EOL; - Context *where = context->where_defined (context_property, - ¤t_context_val); + if (!context->here_defined (context_property, ¤t_context_val)) + { + Context *g = context->get_global_context (); + if (!g) + return; // Context is probably dead - /* - Don't mess with MIDI. - */ - if (!where) - return; + /* + Don't mess with MIDI. + */ + if (g == context + || !g->here_defined (context_property, ¤t_context_val)) + return; - if (where != context) - { - SCM base = updated_grob_properties (context, context_property); + /* where != context */ + + SCM base = updated_grob_properties (context->get_parent_context (), + context_property); current_context_val = scm_cons (base, base); context->set_property (context_property, current_context_val); } @@ -156,8 +162,7 @@ execute_revert_property (Context *context, SCM grob_property_path) { SCM current_context_val = SCM_EOL; - if (context->where_defined (context_property, ¤t_context_val) - == context) + if (context->here_defined (context_property, ¤t_context_val)) { SCM current_alist = scm_car (current_context_val); SCM daddy = scm_cdr (current_context_val); diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index c7cb8108b0..24f6383a7a 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -38,11 +38,9 @@ Property_iterator::process (Moment mom) bool once = to_boolean (m->get_property ("once")); SCM symbol = m->get_property ("symbol"); SCM previous_value = SCM_UNDEFINED; - if (once) { - Context *w = o->where_defined (symbol, &previous_value); - if (o != w) - previous_value = SCM_UNDEFINED; - } + if (once) + o->here_defined (symbol, &previous_value); + send_stream_event (o, "SetProperty", m->origin (), ly_symbol2scm ("symbol"), symbol, ly_symbol2scm ("value"), m->get_property ("value")); @@ -68,11 +66,9 @@ Property_unset_iterator::process (Moment mom) bool once = to_boolean (m->get_property ("once")); SCM symbol = m->get_property ("symbol"); SCM previous_value = SCM_UNDEFINED; - if (once) { - Context *w = o->where_defined (symbol, &previous_value); - if (o != w) - previous_value = SCM_UNDEFINED; - } + if (once) + o->here_defined (symbol, &previous_value); + send_stream_event (o, "UnsetProperty", m->origin (), ly_symbol2scm ("symbol"), symbol); -- 2.39.5