SHOW: Implement SHOW ENVIRONMENT.
[pspp] / src / language / expressions / evaluate.c
index 8b47f445ee050df33f112c25a2c85a526d9f7a4d..8719e5e950e9772f4a4543db4615880402017a9e 100644 (file)
@@ -148,6 +148,7 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
 
           if (!lex_force_id (lexer))
             goto done;
+          int name_ofs = lex_ofs (lexer);
           name = xstrdup (lex_tokcstr (lexer));
 
           lex_get (lexer);
@@ -175,7 +176,7 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
             }
           else
             {
-              lex_error (lexer, _("expecting number or string"));
+              lex_error (lexer, _("Syntax error expecting number or string."));
               goto done;
             }
 
@@ -188,7 +189,8 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
           v = dict_create_var (d, name, width);
           if (v == NULL)
             {
-              msg (SE, _("Duplicate variable name %s."), name);
+              lex_ofs_error (lexer, name_ofs, name_ofs,
+                             _("Duplicate variable name %s."), name);
               value_destroy (&value, width);
               goto done;
             }
@@ -225,10 +227,17 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
       else if (lex_match_id (lexer, "FORMAT"))
         {
           lex_match (lexer, T_EQUALS);
-          if (!parse_format_specifier (lexer, &format)
-              || !fmt_check_output (&format)
-              || !fmt_check_type_compat (&format, VAL_NUMERIC))
+          if (!parse_format_specifier (lexer, &format))
             goto done;
+          char *error = fmt_check_output__ (format);
+          if (!error)
+            error = fmt_check_type_compat__ (format, NULL, VAL_NUMERIC);
+          if (error)
+            {
+              lex_next_error (lexer, -1, -1, "%s", error);
+              free (error);
+              goto done;
+            }
           has_format = true;
         }
       else
@@ -273,7 +282,7 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
           if (has_format)
             {
               char *output = data_out (&(const union value) { .f = d },
-                                       NULL, &format,
+                                       NULL, format,
                                        settings_get_fmt_settings ());
               output_log ("%s => %s", title, output);
               free (output);