Fix fencepost typo in integer_shift_left.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 2 Mar 2012 19:34:50 +0000 (19:34 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 2 Mar 2012 19:34:50 +0000 (19:34 +0000)
Now (fixnum? (expt 2 24)) returns #t as it should.

src/microcode/artutl.c

index b6efff0e5925def11d486ba3ca87bce034325a13..091f6b50d0a493d31f4d0b6c0b77c7a4fb417dc2 100644 (file)
@@ -675,7 +675,7 @@ integer_shift_left (SCHEME_OBJECT n, unsigned long m)
       long n1 = (FIXNUM_TO_LONG (n));
       if (n1 < 0)
        {
-         if ((m + (ulong_length_in_bits (~n1))) < FIXNUM_LENGTH)
+         if ((m + (ulong_length_in_bits (~n1))) <= FIXNUM_LENGTH)
            /* The behaviour of shifting a negative integer is
               undefined in C.  */
            return (LONG_TO_FIXNUM (- ((-n1) << m)));
@@ -685,7 +685,7 @@ integer_shift_left (SCHEME_OBJECT n, unsigned long m)
        }
       else if (0 < n1)
        {
-         if ((m + (ulong_length_in_bits (n1))) < FIXNUM_LENGTH)
+         if ((m + (ulong_length_in_bits (n1))) <= FIXNUM_LENGTH)
            return (LONG_TO_FIXNUM (n1 << m));
          else
            return (unsigned_long_to_shifted_bignum (n1, m, 0));