INSERT: Add testing-only feature for ignoring cascading failures.
[pspp] / src / language / lexer / value-parser.c
index 55707f6ac576f9f82aba8b390f4b58a34947c3dc..c91fa89da12474a7c8d115c9a60ab844691e468d 100644 (file)
@@ -48,6 +48,8 @@ bool
 parse_num_range (struct lexer *lexer,
                  double *x, double *y, const enum fmt_type *format)
 {
+  int start_ofs = lex_ofs (lexer);
+
   if (lex_match_id (lexer, "LO") || lex_match_id (lexer, "LOWEST"))
     *x = LOWEST;
   else if (!parse_number (lexer, x, format))
@@ -63,15 +65,17 @@ parse_num_range (struct lexer *lexer,
       if (*y < *x)
         {
           double t;
-          msg (SW, _("The high end of the range (%.*g) is below the low end "
-                     "(%.*g).  The range will be treated as if reversed."),
-               DBL_DIG + 1, *y, DBL_DIG + 1, *x);
+          lex_ofs_msg (lexer, SW, start_ofs, lex_ofs (lexer) - 1,
+                       ("The high end of the range (%.*g) is below the low end "
+                        "(%.*g).  The range will be treated as if reversed."),
+                       DBL_DIG + 1, *y, DBL_DIG + 1, *x);
           t = *x;
           *x = *y;
           *y = t;
         }
       else if (*x == *y)
-        msg (SW, _("Ends of range are equal (%.*g)."), DBL_DIG + 1, *x);
+        lex_ofs_msg (lexer, SW, start_ofs, lex_ofs (lexer) - 1,
+                     _("Ends of range are equal (%.*g)."), DBL_DIG + 1, *x);
 
       return true;
     }
@@ -79,7 +83,9 @@ parse_num_range (struct lexer *lexer,
     {
       if (*x == LOWEST)
         {
-          msg (SE, _("%s or %s must be part of a range."), "LO", "LOWEST");
+          lex_next_msg (lexer, SW, -1, -1,
+                        _("%s or %s must be part of a range."),
+                         "LO", "LOWEST");
           return false;
         }
       *y = *x;
@@ -102,14 +108,16 @@ parse_number (struct lexer *lexer, double *x, const enum fmt_type *format)
 
       assert (fmt_get_category (*format) != FMT_CAT_STRING);
 
-      if (!data_in_msg (lex_tokss (lexer), "UTF-8", *format, &v, 0, NULL))
+      if (!data_in_msg (lex_tokss (lexer), "UTF-8", *format,
+                        settings_get_fmt_settings (), &v, 0, NULL))
         return false;
 
       lex_get (lexer);
       *x = v.f;
       if (*x == SYSMIS)
         {
-          msg (SE, _("System-missing value is not valid here."));
+          lex_next_error (lexer, -1, -1,
+                          _("System-missing value is not valid here."));
           return false;
         }
       return true;