]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 3444: No warning for misspelled properties
authorDavid Kastrup <dak@gnu.org>
Fri, 12 Jul 2013 13:03:08 +0000 (15:03 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 18 Jul 2013 06:34:07 +0000 (08:34 +0200)
This makes sure that properties are checked to be assignable even when
assigning #f or '() to them.

lily/context.cc
lily/lily-guile.cc

index 3453284cd8c75455787aebcb47252e4ea94b6779..583b2eac89b7705762fb32968e310c6fb7e202ac 100644 (file)
@@ -256,8 +256,8 @@ Context::set_property_from_event (SCM sev)
       }
           
       bool ok = true;
-      if (val != SCM_EOL)
-        ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
+      ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
+
       if (ok)
         set_property (sym, val);
     }
index 27909a6bc2a43bccca2bcce48fdb029099f3eb6d..5e3b1c0f697ed6bcdda79e01ee761849163028b2 100644 (file)
@@ -399,16 +399,6 @@ print_scm_val (SCM val)
 bool
 type_check_assignment (SCM sym, SCM val, SCM type_symbol)
 {
-  bool ok = true;
-
-  /*
-    Always succeeds.
-
-
-    TODO: should remove #f from allowed vals?
-  */
-  if (val == SCM_EOL || val == SCM_BOOL_F)
-    return ok;
 
   // If undefined, some internal function caused it...should never happen.
   assert (val != SCM_UNDEFINED);
@@ -429,26 +419,34 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol)
         scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
                                                                  sym, val));
 
-      warning (_ ("doing assignment anyway"));
+      warning (_ ("skipping assignment"));
+      return false;
     }
-  else
+
+  /*
+    Always succeeds.
+
+
+    TODO: should remove #f from allowed vals?
+  */
+  if (val == SCM_EOL || val == SCM_BOOL_F)
+    return true;
+
+  if (val != SCM_EOL
+      && ly_is_procedure (type)
+      && scm_call_1 (type, val) == SCM_BOOL_F)
     {
-      if (val != SCM_EOL
-          && ly_is_procedure (type)
-          && scm_call_1 (type, val) == SCM_BOOL_F)
-        {
-          ok = false;
-          SCM typefunc = ly_lily_module_constant ("type-name");
-          SCM type_name = scm_call_1 (typefunc, type);
-
-          warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
-                       ly_symbol2string (sym).c_str (),
-                       print_scm_val (val),
-                       ly_scm2string (type_name).c_str ()));
-          progress_indication ("\n");
-        }
+      SCM typefunc = ly_lily_module_constant ("type-name");
+      SCM type_name = scm_call_1 (typefunc, type);
+      
+      warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
+                   ly_symbol2string (sym).c_str (),
+                   print_scm_val (val),
+                   ly_scm2string (type_name).c_str ()));
+      progress_indication ("\n");
+      return false;
     }
-  return ok;
+  return true;
 }
 
 /* some SCM abbrevs