]> git.donarmstrong.com Git - lilypond.git/commitdiff
Use Context::here_defined to speed up some operations
authorDavid Kastrup <dak@gnu.org>
Sat, 9 Aug 2014 20:04:08 +0000 (22:04 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 14 Aug 2014 15:57:24 +0000 (17:57 +0200)
lily/accidental-engraver.cc
lily/context-property.cc
lily/property-iterator.cc

index 5bc78357b25d861b50f73377909af0419aa5bde7..af6ce5ee8ee823f98846f6170436b649f2665986 100644 (file)
@@ -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 ();
index eb1eee219693e1fa5f0c522135863a44cd7bfda0..b578321a9370c79ea79b6bd8256e687140ab55a0 100644 (file)
@@ -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,
-                                           &current_context_val);
+  if (!context->here_defined (context_property, &current_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, &current_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, &current_context_val)
-      == context)
+  if (context->here_defined (context_property, &current_context_val))
     {
       SCM current_alist = scm_car (current_context_val);
       SCM daddy = scm_cdr (current_context_val);
index c7cb8108b0b214f8e2c5e1f4209c430c0f37f472..24f6383a7ad6e1964a86adc48d5daad1b8417a5f 100644 (file)
@@ -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);