]> git.eshelyaron.com Git - emacs.git/commitdiff
New experimental variable read-integer-overflow-as-float.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 29 Mar 2018 18:01:38 +0000 (11:01 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 29 Mar 2018 18:03:07 +0000 (11:03 -0700)
Following a suggestion by Eli Zaretskii (Bug#30408#46).
* etc/NEWS: Mention it.
* src/lread.c (syms_of_lread): Add it.
(read1): Treat out-of-range integers as floats if
read-integer-overflow-as-float is non-nil.

etc/NEWS
src/lread.c

index 9161f2bd3230c398420ab2d5eba837140fd7ad27..9dddc902130cf2b720c8ea950c09b87b9a3eddf3 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -356,8 +356,10 @@ implementation to format (Bug#30408).
 ** The Lisp reader now signals an overflow for plain decimal integers
 that do not end in '.' and are outside Emacs range.  Formerly the Lisp
 reader silently converted them to floating-point numbers, and signaled
-overflow only for integers with a radix that are outside machine range
-(Bug#30408).
+overflow only for integers with a radix that are outside machine range.
+To get the old behavior, set the new, experimental variable
+read-integer-overflow-as-float to t and please email
+30408@debbugs.gnu.org if you need that.  (Bug#30408).
 
 ---
 ** Some functions and variables obsolete since Emacs 22 have been removed:
index a774524ee43eb9aac17fdafbe40dbfaf9e6ec313..8fb61f56338aad751e794a49b0f5b4a80450b0d0 100644 (file)
@@ -3502,7 +3502,9 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
 
        if (!quoted && !uninterned_symbol)
          {
-           Lisp_Object result = string_to_number (read_buffer, 10, 0);
+           int flags = (read_integer_overflow_as_float
+                        ? S2N_OVERFLOW_TO_FLOAT : 0);
+           Lisp_Object result = string_to_number (read_buffer, 10, flags);
            if (! NILP (result))
              return unbind_to (count, result);
          }
@@ -4830,6 +4832,13 @@ were read in.  */);
               doc: /* Non-nil means read recursive structures using #N= and #N# syntax.  */);
   Vread_circle = Qt;
 
+  DEFVAR_BOOL ("read-integer-overflow-as-float",
+              read_integer_overflow_as_float,
+              doc: /* Non-nil means `read' quietly treats an out-of-range integer as floating point.
+Nil (the default) means signal an overflow unless the integer ends in `.'.
+This variable is experimental; email 30408@debbugs.gnu.org if you need it.  */);
+  read_integer_overflow_as_float = false;
+
   DEFVAR_LISP ("load-path", Vload_path,
               doc: /* List of directories to search for files to load.
 Each element is a string (directory file name) or nil (meaning