diff src/data.c @ 106406:b793459cea92

Fix `string-to-number' to deal consistently with integers and floats. * lread.c (isfloat_string): New argument ignore_trailing to accept all trailing characters, not just whitespace. (read1): Pass new arg 0 to keep old behavior. * data.c (Fstring_to_number): Pass 1 to isfloat_string to ignore trailing chars, as it is already done for integers. Doc fixes. * lisp.h (isfloat_string): Add new arg to declaration of isfloat_string.
author Juanma Barranquero <lekktu@gmail.com>
date Fri, 04 Dec 2009 16:16:26 +0000
parents f2cea199b0c4
children 1d1d5d9bd884
line wrap: on
line diff
--- a/src/data.c	Fri Dec 04 10:51:37 2009 +0000
+++ b/src/data.c	Fri Dec 04 16:16:26 2009 +0000
@@ -1770,7 +1770,7 @@
   CHECK_SYMBOL (variable);
   sym = indirect_variable (XSYMBOL (variable));
   XSETSYMBOL (variable, sym);
-  
+
   valcontents = sym->value;
   if (BUFFER_LOCAL_VALUEP (valcontents))
     {
@@ -2353,11 +2353,11 @@
 DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0,
        doc: /* Parse STRING as a decimal number and return the number.
 This parses both integers and floating point numbers.
-It ignores leading spaces and tabs.
+It ignores leading spaces and tabs, and all trailing chars.
 
 If BASE, interpret STRING as a number in that base.  If BASE isn't
 present, base 10 is used.  BASE must be between 2 and 16 (inclusive).
-If the base used is not 10, floating point is not recognized.  */)
+If the base used is not 10, STRING is always parsed as integer.  */)
      (string, base)
      register Lisp_Object string, base;
 {
@@ -2392,7 +2392,7 @@
   else if (*p == '+')
     p++;
 
-  if (isfloat_string (p) && b == 10)
+  if (isfloat_string (p, 1) && b == 10)
     val = make_float (sign * atof (p));
   else
     {