Commit 28746aba authored by Neal Norwitz's avatar Neal Norwitz

On 64 bit systems, int literals that use less than 64 bits are now ints

rather than longs.  This also fixes the test for eval(-sys.maxint - 1).
parent 6ec6ab02
...@@ -216,6 +216,21 @@ if 1: ...@@ -216,6 +216,21 @@ if 1:
self.assertTrue(isinstance(eval("%s" % (-sys.maxint - 1)), int)) self.assertTrue(isinstance(eval("%s" % (-sys.maxint - 1)), int))
self.assertTrue(isinstance(eval("%s" % (-sys.maxint - 2)), long)) self.assertTrue(isinstance(eval("%s" % (-sys.maxint - 2)), long))
if sys.maxint == 9223372036854775807:
def test_32_63_bit_values(self):
a = +4294967296 # 1 << 32
b = -4294967296 # 1 << 32
c = +281474976710656 # 1 << 48
d = -281474976710656 # 1 << 48
e = +4611686018427387904 # 1 << 62
f = -4611686018427387904 # 1 << 62
g = +9223372036854775807 # 1 << 63 - 1
h = -9223372036854775807 # 1 << 63 - 1
for variable in self.test_32_63_bit_values.func_code.co_consts:
if variable is not None:
self.assertTrue(isinstance(variable, int))
def test_sequence_unpacking_error(self): def test_sequence_unpacking_error(self):
# Verify sequence packing/unpacking with "or". SF bug #757818 # Verify sequence packing/unpacking with "or". SF bug #757818
i,j = (1, -1) or (-1, 1) i,j = (1, -1) or (-1, 1)
......
...@@ -30,6 +30,9 @@ Core and builtins ...@@ -30,6 +30,9 @@ Core and builtins
- Bug #1519018: 'as' is now validated properly in import statements. - Bug #1519018: 'as' is now validated properly in import statements.
- On 64 bit systems, int literals that use less than 64 bits are
now ints rather than longs.
Library Library
------- -------
......
...@@ -69,11 +69,22 @@ static unsigned long smallmax[] = { ...@@ -69,11 +69,22 @@ static unsigned long smallmax[] = {
* calculated by [int(math.floor(math.log(2**32, i))) for i in range(2, 37)]. * calculated by [int(math.floor(math.log(2**32, i))) for i in range(2, 37)].
* Note that this is pessimistic if sizeof(long) > 4. * Note that this is pessimistic if sizeof(long) > 4.
*/ */
#if SIZEOF_LONG == 4
static int digitlimit[] = { static int digitlimit[] = {
0, 0, 32, 20, 16, 13, 12, 11, 10, 10, /* 0 - 9 */ 0, 0, 32, 20, 16, 13, 12, 11, 10, 10, /* 0 - 9 */
9, 9, 8, 8, 8, 8, 8, 7, 7, 7, /* 10 - 19 */ 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, /* 10 - 19 */
7, 7, 7, 7, 6, 6, 6, 6, 6, 6, /* 20 - 29 */ 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, /* 20 - 29 */
6, 6, 6, 6, 6, 6, 6}; /* 30 - 36 */ 6, 6, 6, 6, 6, 6, 6}; /* 30 - 36 */
#elif SIZEOF_LONG == 8
/* [int(math.floor(math.log(2**64, i))) for i in range(2, 37)] */
static int digitlimit[] = {
0, 0, 64, 40, 32, 27, 24, 22, 21, 20, /* 0 - 9 */
19, 18, 17, 17, 16, 16, 16, 15, 15, 15, /* 10 - 19 */
14, 14, 14, 14, 13, 13, 13, 13, 13, 13, /* 20 - 29 */
13, 12, 12, 12, 12, 12, 12}; /* 30 - 36 */
#else
#error "Need table for SIZEOF_LONG"
#endif
/* /*
** strtoul ** strtoul
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment