]> granicus.if.org Git - python/commitdiff
Patch #1654417: make operator.{get,set,del}slice use the full range
authorGeorg Brandl <georg@python.org>
Tue, 6 Mar 2007 19:00:09 +0000 (19:00 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 6 Mar 2007 19:00:09 +0000 (19:00 +0000)
of Py_ssize_t.
 (backport from rev. 54177)

Lib/test/test_operator.py
Misc/NEWS
Modules/operator.c

index 3cc0f1e837295d4f37b110c1a654727c1050ed62..085f8c4400fd028676bf0b512c95f436fa1f7d0c 100644 (file)
@@ -143,6 +143,8 @@ class OperatorTestCase(unittest.TestCase):
         self.failUnlessRaises(TypeError, operator.delslice, a, None, None)
         self.failUnless(operator.delslice(a, 2, 8) is None)
         self.assert_(a == [0, 1, 8, 9])
+        operator.delslice(a, 0, test_support.MAX_Py_ssize_t)
+        self.assert_(a == [])
 
     def test_div(self):
         self.failUnlessRaises(TypeError, operator.div, 5)
@@ -170,6 +172,8 @@ class OperatorTestCase(unittest.TestCase):
         self.failUnlessRaises(TypeError, operator.getslice)
         self.failUnlessRaises(TypeError, operator.getslice, a, None, None)
         self.failUnless(operator.getslice(a, 4, 6) == [4, 5])
+        b = operator.getslice(a, 0, test_support.MAX_Py_ssize_t)
+        self.assert_(b == a)
 
     def test_indexOf(self):
         self.failUnlessRaises(TypeError, operator.indexOf)
@@ -318,6 +322,8 @@ class OperatorTestCase(unittest.TestCase):
         self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None)
         self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None)
         self.assert_(a == [0, 2, 1, 3])
+        operator.setslice(a, 0, test_support.MAX_Py_ssize_t, [])
+        self.assert_(a == [])
 
     def test_sub(self):
         self.failUnlessRaises(TypeError, operator.sub)
index f6ebc2422245a67a760cc8d76ff40939525c88f4..27dddf820dae4823427b3bfef2d63abaf7a2ae2c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -120,6 +120,9 @@ Core and builtins
 Extension Modules
 -----------------
 
+- Patch #1654417: make operator.{get,set,del}slice use the full range
+  of Py_ssize_t.
+
 - Patch #1646728: datetime.fromtimestamp fails with negative
   fractional times.  With unittest.
 
index 7479a53553201b63d4644849aa2f3a1e1a786037..0a7222a728a5f299e31480f0a3395decec262715 100644 (file)
@@ -168,43 +168,41 @@ static PyObject*
 op_getslice(PyObject *s, PyObject *a)
 {
         PyObject *a1;
-        int a2,a3;
+        Py_ssize_t a2, a3;
 
-        if (!PyArg_ParseTuple(a,"Oii:getslice",&a1,&a2,&a3))
+        if (!PyArg_ParseTuple(a, "Onn:getslice", &a1, &a2, &a3))
                 return NULL;
-        return PySequence_GetSlice(a1,a2,a3);
+        return PySequence_GetSlice(a1, a2, a3);
 }
 
 static PyObject*
 op_setslice(PyObject *s, PyObject *a)
 {
         PyObject *a1, *a4;
-        int a2,a3;
+        Py_ssize_t a2, a3;
 
-        if (!PyArg_ParseTuple(a,"OiiO:setslice",&a1,&a2,&a3,&a4))
+        if (!PyArg_ParseTuple(a, "OnnO:setslice", &a1, &a2, &a3, &a4))
                 return NULL;
 
-        if (-1 == PySequence_SetSlice(a1,a2,a3,a4))
+        if (-1 == PySequence_SetSlice(a1, a2, a3, a4))
                 return NULL;
 
-        Py_INCREF(Py_None);
-        return Py_None;
+       Py_RETURN_NONE;
 }
 
 static PyObject*
 op_delslice(PyObject *s, PyObject *a)
 {
         PyObject *a1;
-        int a2,a3;
+        Py_ssize_t a2, a3;
 
-        if(! PyArg_ParseTuple(a,"Oii:delslice",&a1,&a2,&a3))
+        if (!PyArg_ParseTuple(a, "Onn:delslice", &a1, &a2, &a3))
                 return NULL;
 
-        if (-1 == PySequence_DelSlice(a1,a2,a3))
+        if (-1 == PySequence_DelSlice(a1, a2, a3))
                 return NULL;
 
-        Py_INCREF(Py_None);
-        return Py_None;
+       Py_RETURN_NONE;
 }
 
 #undef spam1