expressions: Improve error messages evaluating invalid Boolean values.
[pspp] / src / language / expressions / operations.def
index 2d31bd47182dcb158d9f9c50e644fb03bb7b07bf..d3044043df4a168bac21a466422eb4038ea38388 100644 (file)
@@ -573,7 +573,7 @@ string function RTRIM (string s, string c)
 function NUMBER (string s, ni_format f)
 {
   union value out;
-  data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, &out, 0);
+  data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, NULL, &out, 0);
   return out.f;
 }
 
@@ -582,11 +582,15 @@ absorb_miss string function STRING (x, no_format f)
 {
   union value v;
   struct substring dst;
+  char *s;
 
   v.f = x;
-  dst = alloc_string (e, f->w);
+
   assert (!fmt_is_string (f->type));
-  data_out (&v, f, dst.string);
+  s = data_out (&v, LEGACY_NATIVE, f);
+  dst = alloc_string (e, strlen (s));
+  strcpy (dst.string, s);
+  free (s);
   return dst;
 }
 
@@ -626,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.;
     }
 }