]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle leading "+" when converting string to bignum
authorTom Tromey <tom@tromey.com>
Wed, 8 Aug 2018 23:33:24 +0000 (17:33 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 8 Aug 2018 23:33:24 +0000 (17:33 -0600)
* src/lread.c (string_to_number): Skip leading "+" when calling
make_bignum_str.

src/lread.c

index bcb695c3dae2f226c31b907874763bd4117d0665..3a2d9c8a6d3a118e2848dc28c8796e336143d3bf 100644 (file)
@@ -3792,21 +3792,16 @@ string_to_number (char const *string, int base, int flags)
      range, use its value, preferably as a fixnum.  */
   if (leading_digit >= 0 && ! float_syntax)
     {
-      if (state & INTOVERFLOW)
-       {
-         /* Unfortunately there's no simple and accurate way to convert
-            non-base-10 numbers that are out of C-language range.  */
-         if (base != 10)
-           flags = 0;
-       }
-      else if (n <= (negative ? -MOST_NEGATIVE_FIXNUM : MOST_POSITIVE_FIXNUM))
+      if ((state & INTOVERFLOW) == 0
+         && n <= (negative ? -MOST_NEGATIVE_FIXNUM : MOST_POSITIVE_FIXNUM))
        {
          EMACS_INT signed_n = n;
          return make_fixnum (negative ? -signed_n : signed_n);
        }
-      else
-       value = n;
 
+      /* Skip a leading "+".  */
+      if (signedp && !negative)
+       ++string;
       return make_bignum_str (string, base);
     }