variable-parser: Implement PV_NO_DUPLICATE.
[pspp] / src / language / dictionary / numeric.c
index 5c64b948488d2fa8b4aedebd4dca15e69a87ab95..41f3c79a67b8bcc3ea5b1194f770a93535f86713 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2010 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -43,13 +43,13 @@ cmd_numeric (struct lexer *lexer, struct dataset *ds)
   char **v;
   size_t nv;
 
-  /* Format spec for variables to create.  f.type==-1 if default is to
-     be used. */
-  struct fmt_spec f;
-
   do
     {
-      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NONE))
+      /* Format spec for variables to create.  f.type==-1 if default is to
+        be used. */
+      struct fmt_spec f;
+
+      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NO_DUPLICATE))
        return CMD_FAILURE;
 
       /* Get the optional format specification. */
@@ -57,6 +57,10 @@ cmd_numeric (struct lexer *lexer, struct dataset *ds)
        {
          if (!parse_format_specifier (lexer, &f))
            goto fail;
+
+         if ( ! fmt_check_output (&f))
+           goto fail;
+
          if (fmt_is_string (f.type))
            {
               char str[FMT_STRING_LEN_MAX + 1];
@@ -123,7 +127,7 @@ cmd_string (struct lexer *lexer, struct dataset *ds)
 
   do
     {
-      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NONE))
+      if (!parse_DATA_LIST_vars (lexer, &v, &nv, PV_NO_DUPLICATE))
        return CMD_FAILURE;
 
       if (!lex_force_match (lexer, '(')