mirror of
https://github.com/python/cpython.git
synced 2025-10-13 18:33:34 +00:00
Patch #1654417: make operator.{get,set,del}slice use the full range
of Py_ssize_t. (backport from rev. 54177)
This commit is contained in:
parent
2230d98048
commit
62b1b001e6
3 changed files with 20 additions and 13 deletions
|
@ -143,6 +143,8 @@ class OperatorTestCase(unittest.TestCase):
|
||||||
self.failUnlessRaises(TypeError, operator.delslice, a, None, None)
|
self.failUnlessRaises(TypeError, operator.delslice, a, None, None)
|
||||||
self.failUnless(operator.delslice(a, 2, 8) is None)
|
self.failUnless(operator.delslice(a, 2, 8) is None)
|
||||||
self.assert_(a == [0, 1, 8, 9])
|
self.assert_(a == [0, 1, 8, 9])
|
||||||
|
operator.delslice(a, 0, test_support.MAX_Py_ssize_t)
|
||||||
|
self.assert_(a == [])
|
||||||
|
|
||||||
def test_div(self):
|
def test_div(self):
|
||||||
self.failUnlessRaises(TypeError, operator.div, 5)
|
self.failUnlessRaises(TypeError, operator.div, 5)
|
||||||
|
@ -170,6 +172,8 @@ class OperatorTestCase(unittest.TestCase):
|
||||||
self.failUnlessRaises(TypeError, operator.getslice)
|
self.failUnlessRaises(TypeError, operator.getslice)
|
||||||
self.failUnlessRaises(TypeError, operator.getslice, a, None, None)
|
self.failUnlessRaises(TypeError, operator.getslice, a, None, None)
|
||||||
self.failUnless(operator.getslice(a, 4, 6) == [4, 5])
|
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):
|
def test_indexOf(self):
|
||||||
self.failUnlessRaises(TypeError, operator.indexOf)
|
self.failUnlessRaises(TypeError, operator.indexOf)
|
||||||
|
@ -318,6 +322,8 @@ class OperatorTestCase(unittest.TestCase):
|
||||||
self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None)
|
self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None)
|
||||||
self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None)
|
self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None)
|
||||||
self.assert_(a == [0, 2, 1, 3])
|
self.assert_(a == [0, 2, 1, 3])
|
||||||
|
operator.setslice(a, 0, test_support.MAX_Py_ssize_t, [])
|
||||||
|
self.assert_(a == [])
|
||||||
|
|
||||||
def test_sub(self):
|
def test_sub(self):
|
||||||
self.failUnlessRaises(TypeError, operator.sub)
|
self.failUnlessRaises(TypeError, operator.sub)
|
||||||
|
|
|
@ -120,6 +120,9 @@ Core and builtins
|
||||||
Extension Modules
|
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
|
- Patch #1646728: datetime.fromtimestamp fails with negative
|
||||||
fractional times. With unittest.
|
fractional times. With unittest.
|
||||||
|
|
||||||
|
|
|
@ -168,43 +168,41 @@ static PyObject*
|
||||||
op_getslice(PyObject *s, PyObject *a)
|
op_getslice(PyObject *s, PyObject *a)
|
||||||
{
|
{
|
||||||
PyObject *a1;
|
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 NULL;
|
||||||
return PySequence_GetSlice(a1,a2,a3);
|
return PySequence_GetSlice(a1, a2, a3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
op_setslice(PyObject *s, PyObject *a)
|
op_setslice(PyObject *s, PyObject *a)
|
||||||
{
|
{
|
||||||
PyObject *a1, *a4;
|
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;
|
return NULL;
|
||||||
|
|
||||||
if (-1 == PySequence_SetSlice(a1,a2,a3,a4))
|
if (-1 == PySequence_SetSlice(a1, a2, a3, a4))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_RETURN_NONE;
|
||||||
return Py_None;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
op_delslice(PyObject *s, PyObject *a)
|
op_delslice(PyObject *s, PyObject *a)
|
||||||
{
|
{
|
||||||
PyObject *a1;
|
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;
|
return NULL;
|
||||||
|
|
||||||
if (-1 == PySequence_DelSlice(a1,a2,a3))
|
if (-1 == PySequence_DelSlice(a1, a2, a3))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_RETURN_NONE;
|
||||||
return Py_None;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef spam1
|
#undef spam1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue