expressions: Improve error messages evaluating invalid Boolean values.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Jun 2010 19:19:19 +0000 (12:19 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Jun 2010 19:45:44 +0000 (12:45 -0700)
The error message used for an invalid Boolean value was terribly generic.
This commit adds the name of the operator to the error message.

src/language/expressions/operations.def
src/language/expressions/parse.c

index d283867214811ea142d83cafd39d9b69faf2a0a0..d3044043df4a168bac21a466422eb4038ea38388 100644 (file)
@@ -630,16 +630,16 @@ absorb_miss no_opt no_abbrev string function VALUELABEL (var v)
 
 // Artificial.
 operator SQUARE (x) = x * x;
-boolean operator NUM_TO_BOOLEAN (x)
+boolean operator NUM_TO_BOOLEAN (x, string op_name)
 {
   if (x == 0. || x == 1. || x == SYSMIS)
     return x;
   else
     {
-      msg (SE, _("A number being treated as a Boolean in an "
-                 "expression was found to have a value other than "
-                 "0 (false), 1 (true), or the system-missing value.  "
-                 "The result was forced to 0."));
+      msg (SE, _("An operand of the %.*s operator was found to have a value "
+                 "other than 0 (false), 1 (true), or the system-missing "
+                 "value.  The result was forced to 0."),
+           (int) op_name.length, op_name.string);
       return 0.;
     }
 }
index 3577443da94194a5317e80d9abcd5a42f87ffd99..ca510852b0b3bf1b697ae57f621a593767239fcb 100644 (file)
@@ -344,7 +344,13 @@ type_coercion_core (struct expression *e,
         {
           /* Convert numeric to boolean. */
           if (do_coercion)
-            *node = expr_allocate_unary (e, OP_NUM_TO_BOOLEAN, *node);
+            {
+              union any_node *op_name;
+
+              op_name = expr_allocate_string (e, ss_cstr (operator_name));
+              *node = expr_allocate_binary (e, OP_NUM_TO_BOOLEAN, *node,
+                                            op_name);
+            }
           return true;
         }
       break;