From: Thomas Wouters Date: Tue, 4 Apr 2006 17:28:12 +0000 (+0000) Subject: Make xrange more Py_ssize_t aware, by assuming a Py_ssize_t is always at X-Git-Tag: v2.5a1~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4d8f390536416c083c687206be8e2687e26c9a3;p=python Make xrange more Py_ssize_t aware, by assuming a Py_ssize_t is always at least as big as a long. I believe this to be a safe assumption that is being made in many parts of CPython, but a check could be added. len(xrange(sys.maxint)) works now, so fix the testsuite's odd exception for 64-bit platforms too. It also fixes 'zip(xrange(sys.maxint), it)' as a portable-ish (if expensive) alternative to enumerate(it); since zip() now calls len(), this was breaking on (real) 64-bit platforms. No additional test was added for that behaviour. --- diff --git a/Lib/test/test_xrange.py b/Lib/test/test_xrange.py index 9f9daa7bf8..eafb7fad56 100644 --- a/Lib/test/test_xrange.py +++ b/Lib/test/test_xrange.py @@ -54,12 +54,7 @@ class XrangeTest(unittest.TestCase): self.assertRaises(OverflowError, xrange, 0, 2*sys.maxint) r = xrange(-sys.maxint, sys.maxint, 2) - if sys.maxint > 0x7fffffff: - # XXX raising ValueError is less than ideal, but this can't - # be fixed until range_length() returns a long in rangeobject.c - self.assertRaises(ValueError, len, r) - else: - self.assertEqual(len(r), sys.maxint) + self.assertEqual(len(r), sys.maxint) self.assertRaises(OverflowError, xrange, -sys.maxint-1, sys.maxint, 2) def test_main(): diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index 707ad4690e..e8374c15cc 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -104,13 +104,6 @@ range_item(rangeobject *r, Py_ssize_t i) static Py_ssize_t range_length(rangeobject *r) { -#if LONG_MAX != INT_MAX /* XXX ssize_t_max */ - if (r->len > INT_MAX) { - PyErr_SetString(PyExc_ValueError, - "xrange object size cannot be reported"); - return -1; - } -#endif return (Py_ssize_t)(r->len); }