changeset 1914:60965a5c325f

* data.c (Fstring_to_number): Skip initial spaces, to make Emacs lisp parse consistently on different operating systems. #include <ctype.h> to help with this. * data.c (Fstring_to_int): Rename this to Fstring_to_number, since it parses floats as well as integers. Fix docstring. (syms_of_data): Fix defsubr. (wrong_type_argument): Change use. (Fint_to_string): Doc fix. * lisp.h (Fstring_to_int): Change extern declaration. * data.c (wrong_type_argument): Pass the correct number of arguments to Fstring_to_int. * data.c (arithcompare): Add a default case which aborts, just to make me happy.
author Jim Blandy <jimb@redhat.com>
date Mon, 22 Feb 1993 14:27:14 +0000
parents 674578464a59
children 98ecf99d7b1a
files src/data.c
diffstat 1 files changed, 24 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/data.c	Mon Feb 22 14:26:51 1993 +0000
+++ b/src/data.c	Mon Feb 22 14:27:14 1993 +0000
@@ -19,6 +19,7 @@
 
 
 #include <signal.h>
+#include <ctype.h>
 
 #include "config.h"
 #include "lisp.h"
@@ -67,7 +68,7 @@
 	{
 	 if (XTYPE (value) == Lisp_String &&
 	     (EQ (predicate, Qintegerp) || EQ (predicate, Qinteger_or_marker_p)))
-	   return Fstring_to_int (value, Qt);
+	   return Fstring_to_number (value);
 	 if (XTYPE (value) == Lisp_Int && EQ (predicate, Qstringp))
 	   return Fint_to_string (value);
 	}
@@ -1344,6 +1345,9 @@
       if (floatp ? f1 >= f2 : XINT (num1) >= XINT (num2))
 	return Qt;
       return Qnil;
+
+    default:
+      abort ();
     }
 }
 
@@ -1420,8 +1424,9 @@
 }
 
 DEFUN ("int-to-string", Fint_to_string, Sint_to_string, 1, 1, 0,
-  "Convert INT to a string by printing it in decimal.\n\
-Uses a minus sign if negative.")
+  "Convert NUM to a string by printing it in decimal.\n\
+Uses a minus sign if negative.\n\
+NUM may be an integer or a floating point number.")
   (num)
      Lisp_Object num;
 {
@@ -1445,19 +1450,29 @@
   return build_string (buffer);
 }
 
-DEFUN ("string-to-int", Fstring_to_int, Sstring_to_int, 1, 1, 0,
-  "Convert STRING to an integer by parsing it as a decimal number.")
+DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 1, 0,
+  "Convert STRING to a number by parsing it as a decimal number.\n\
+This parses both integers and floating point numbers.")
   (str)
      register Lisp_Object str;
 {
+  char *p;
+
   CHECK_STRING (str, 0);
 
+  p = XSTRING (str)->data;
+
+  /* Skip any whitespace at the front of the number.  Some versions of
+     atoi do this anyway, so we might as well make Emacs lisp consistent.  */
+  while (isspace (*p))
+    p++;
+
 #ifdef LISP_FLOAT_TYPE
-  if (isfloat_string (XSTRING (str)->data))
-    return make_float (atof (XSTRING (str)->data));
+  if (isfloat_string (p))
+    return make_float (atof (p));
 #endif /* LISP_FLOAT_TYPE */
 
-  return make_number (atoi (XSTRING (str)->data));
+  return make_number (atoi (p));
 }
   
 enum arithop
@@ -2061,7 +2076,7 @@
   defsubr (&Saref);
   defsubr (&Saset);
   defsubr (&Sint_to_string);
-  defsubr (&Sstring_to_int);
+  defsubr (&Sstring_to_number);
   defsubr (&Seqlsign);
   defsubr (&Slss);
   defsubr (&Sgtr);