]> granicus.if.org Git - python/commitdiff
Make xrange more Py_ssize_t aware, by assuming a Py_ssize_t is always at
authorThomas Wouters <thomas@python.org>
Tue, 4 Apr 2006 17:28:12 +0000 (17:28 +0000)
committerThomas Wouters <thomas@python.org>
Tue, 4 Apr 2006 17:28:12 +0000 (17:28 +0000)
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.

Lib/test/test_xrange.py
Objects/rangeobject.c

index 9f9daa7bf88ff8628c4bf80a7d156c724ade7d3c..eafb7fad569e1ac260f87fccd6f545542fe0866c 100644 (file)
@@ -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():
index 707ad4690e234dc746392a5bcc341b57b8628c52..e8374c15cc9fca799a5e64a81ac2e5bc8cfc3b05 100644 (file)
@@ -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);
 }