Make the Lisp reader and string-to-float more consistent.
commit8b9587d73b579fb2fdd0eaaa1ed5fd608653e522
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Apr 2011 06:24:51 +0000 (19 23:24 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Apr 2011 06:24:51 +0000 (19 23:24 -0700)
tree2f0c598b1d7bfe1e08fdf7b36fce973d7cbd657e
parent602ea69dc7a93969742958ee6af3feae23cd1e02
Make the Lisp reader and string-to-float more consistent.

* data.c (atof): Remove decl; no longer used or needed.
(Fstring_to_number): Use new string_to_float function, to be
consistent with how the Lisp reader treats infinities and NaNs.
Do not assume that floating-point numbers represent EMACS_INT
without losing information; this is not true on most 64-bit hosts.
Avoid double-rounding errors, by insisting on integers when
parsing non-base-10 numbers, as the documentation specifies.
Report integer overflow instead of silently converting to
integers.
* lisp.h (string_to_float): New decl, replacing ...
(isfloat_string): Remove.
* lread.c (read1): Do not accept +. and -. as integers; this
appears to have been a coding error.  Similarly, do not accept
strings like +-1e0 as floating point numbers.  Do not report
overflow for some integer overflows and not others; instead,
report them all.  Break out the floating-point parsing into a new
function string_to_float, so that Fstring_to_number parses
floating point numbers consistently with the Lisp reader.
(string_to_float): New function, replacing isfloat_string.
This function checks for valid syntax and produces the resulting
Lisp float number too.
src/ChangeLog
src/data.c
src/lisp.h
src/lread.c