]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/context-property.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / context-property.cc
index d7923c7018584b410ae5ee85d34a38ec0fc085a0..502fc92f11a3c3ef8902999eb7ad9022744c3825 100644 (file)
@@ -4,16 +4,18 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
 #include "engraver.hh"
+#include "international.hh"
 #include "item.hh"
 #include "main.hh"
+#include "paper-column.hh"
+#include "simple-closure.hh"
 #include "spanner.hh"
 #include "warn.hh"
-#include "paper-column.hh"
 
 SCM
 lookup_nested_property (SCM alist,
@@ -136,7 +138,10 @@ execute_general_pushpop_property (Context *context,
       bool ok = true;
       if (!scm_is_pair (scm_cdr (grob_property_path)))
        {
-         ok = type_check_assignment (symbol, new_value, ly_symbol2scm ("backend-type?"));
+         if (!ly_is_procedure (new_value)
+             && !is_simple_closure (new_value))
+           ok = type_check_assignment (symbol, new_value,
+                                       ly_symbol2scm ("backend-type?"));
 
          /*
            tack onto alist.  We can use set_car, since
@@ -161,6 +166,14 @@ execute_general_pushpop_property (Context *context,
     {
       SCM current_value = scm_car (current_context_val);
       SCM daddy = scm_cdr (current_context_val);
+
+      if (!scm_is_pair (grob_property_path)
+         || !scm_is_symbol (scm_car (grob_property_path)))
+       {
+         programming_error ("Grob property path should be list of symbols.");
+         return;
+       }
+      
       SCM symbol = scm_car (grob_property_path);
       SCM new_alist = evict_from_alist (symbol, current_value, daddy);