data-in: Eliminate "implied_decimals" parameter from data_in().
[pspp] / src / language / lexer / value-parser.c
index c780d86f04e95429bad3ee1004bbf2021ab89884..c2020d36581bf9263cbf366884aa2071c4643f17 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006, 2009, 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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
+
 #include "value-parser.h"
+
 #include <stdbool.h>
-#include <data/data-in.h>
-#include <libpspp/message.h>
-#include "lexer.h"
-#include <libpspp/str.h>
-#include <data/value.h>
-#include <data/format.h>
+
+#include "data/data-in.h"
+#include "data/format.h"
+#include "data/value.h"
+#include "language/lexer/lexer.h"
+#include "libpspp/cast.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -96,12 +100,12 @@ parse_number (struct lexer *lexer, double *x, const enum fmt_type *format)
       lex_get (lexer);
       return true;
     }
-  else if (lex_token (lexer) == T_STRING && format != NULL)
+  else if (lex_is_string (lexer) && format != NULL)
     {
       union value v;
       assert (! (fmt_get_category (*format) & ( FMT_CAT_STRING )));
-      data_in (ds_ss (lex_tokstr (lexer)), LEGACY_NATIVE,
-               *format, 0, 0, 0, NULL, &v, 0);
+      data_in (ds_ss (lex_tokstr (lexer)), LEGACY_NATIVE, *format, 0, 0,
+               NULL, &v, 0);
       lex_get (lexer);
       *x = v.f;
       if (*x == SYSMIS)
@@ -133,12 +137,13 @@ parse_value (struct lexer *lexer, union value *v, int width)
        return false;
       v->f = lex_tokval (lexer);
     }
-  else
+  else if (lex_force_string (lexer))
     {
-      if (!lex_force_string (lexer))
-       return false;
-      value_copy_str_rpad (v, width, ds_cstr (lex_tokstr (lexer)), ' ');
+      const char *s = ds_cstr (lex_tokstr (lexer));
+      value_copy_str_rpad (v, width, CHAR_CAST_BUG (const uint8_t *, s), ' ');
     }
+  else
+    return false;
 
   lex_get (lexer);