Mercurial > emacs
diff src/lread.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 | de63af995d1c |
line wrap: on
line diff
--- a/src/lread.c Fri Dec 04 10:51:37 2009 +0000 +++ b/src/lread.c Fri Dec 04 16:16:26 2009 +0000 @@ -3026,7 +3026,7 @@ } } } - if (isfloat_string (read_buffer)) + if (isfloat_string (read_buffer, 0)) { /* Compute NaN and infinities using 0.0 in a variable, to cope with compilers that think they are smarter @@ -3244,8 +3244,9 @@ #define EXP_INT 16 int -isfloat_string (cp) +isfloat_string (cp, ignore_trailing) register char *cp; + int ignore_trailing; { register int state; @@ -3299,7 +3300,8 @@ cp += 3; } - return (((*cp == 0) || (*cp == ' ') || (*cp == '\t') || (*cp == '\n') || (*cp == '\r') || (*cp == '\f')) + return ((ignore_trailing + || (*cp == 0) || (*cp == ' ') || (*cp == '\t') || (*cp == '\n') || (*cp == '\r') || (*cp == '\f')) && (state == (LEAD_INT|DOT_CHAR|TRAIL_INT) || state == (DOT_CHAR|TRAIL_INT) || state == (LEAD_INT|E_CHAR|EXP_INT)