diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2008-06-30 04:06:08 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2008-06-30 04:06:08 (GMT) |
commit | 029656fb3bc23a2ce03a81fe30bc1b1e5ce5e4cd (patch) | |
tree | 9ab92572d81a043d47a30f9be5ed1cef81d922a3 | |
parent | 2f5799b7b07196504186dad98d8528657981ac6a (diff) | |
download | cpython-029656fb3bc23a2ce03a81fe30bc1b1e5ce5e4cd.zip cpython-029656fb3bc23a2ce03a81fe30bc1b1e5ce5e4cd.tar.gz cpython-029656fb3bc23a2ce03a81fe30bc1b1e5ce5e4cd.tar.bz2 |
Issue #3236: Return small longs from PyLong_FromString.
-rw-r--r-- | Lib/test/test_int.py | 3 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Objects/longobject.c | 8 |
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py index 3462540..dd40ef6 100644 --- a/Lib/test/test_int.py +++ b/Lib/test/test_int.py @@ -95,6 +95,9 @@ class IntTestCases(unittest.TestCase): self.assertRaises(ValueError, int, "0b", 2) self.assertRaises(ValueError, int, "0b", 0) + # Bug #3236: Return small longs from PyLong_FromString + self.assert_(int("10") is 10) + self.assert_(int("-1") is -1) # SF bug 1334662: int(string, base) wrong answers # Various representations of 2**32 evaluated to 0 @@ -12,6 +12,8 @@ What's new in Python 3.0b2? Core and Builtins ----------------- +- Issue #3236: Return small longs from PyLong_FromString. + Library ------- diff --git a/Objects/longobject.c b/Objects/longobject.c index d1c27e6..2c684cb 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -1981,6 +1981,14 @@ digit beyond the first. goto onError; if (pend) *pend = str; + long_normalize(z); + if (ABS(Py_SIZE(z)) <= 1) { + long res = MEDIUM_VALUE(z); + if (-NSMALLPOSINTS <= res && res <= NSMALLPOSINTS) { + Py_DECREF(z); + return PyLong_FromLong(res); + } + } return (PyObject *) z; onError: |