mirror of https://github.com/python/cpython
PyEval_CallObject requires a tuple of args (closes #13186)
This commit is contained in:
parent
5baef6d23b
commit
a7b0976c3e
|
@ -350,6 +350,19 @@ class ClassTests(unittest.TestCase):
|
||||||
AllTests.__delslice__ = delslice
|
AllTests.__delslice__ = delslice
|
||||||
|
|
||||||
|
|
||||||
|
@test_support.cpython_only
|
||||||
|
def testDelItem(self):
|
||||||
|
class A:
|
||||||
|
ok = False
|
||||||
|
def __delitem__(self, key):
|
||||||
|
self.ok = True
|
||||||
|
a = A()
|
||||||
|
# Subtle: we need to call PySequence_SetItem, not PyMapping_SetItem.
|
||||||
|
from _testcapi import sequence_delitem
|
||||||
|
sequence_delitem(a, 2)
|
||||||
|
self.assertTrue(a.ok)
|
||||||
|
|
||||||
|
|
||||||
def testUnaryOps(self):
|
def testUnaryOps(self):
|
||||||
testme = AllTests()
|
testme = AllTests()
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.3?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #13186: Fix __delitem__ on old-style instances when invoked through
|
||||||
|
PySequence_DelItem.
|
||||||
|
|
||||||
- Issue #13156: Revert the patch for issue #10517 (reset TLS upon fork()),
|
- Issue #13156: Revert the patch for issue #10517 (reset TLS upon fork()),
|
||||||
which was only relevant for the native pthread TLS implementation.
|
which was only relevant for the native pthread TLS implementation.
|
||||||
|
|
||||||
|
|
|
@ -1639,6 +1639,19 @@ make_exception_with_doc(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
return PyErr_NewExceptionWithDoc(name, doc, base, dict);
|
return PyErr_NewExceptionWithDoc(name, doc, base, dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
sequence_delitem(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
PyObject *seq;
|
||||||
|
Py_ssize_t i;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "On", &seq, &i))
|
||||||
|
return NULL;
|
||||||
|
if (PySequence_DelItem(seq, i) < 0)
|
||||||
|
return NULL;
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
static PyMethodDef TestMethods[] = {
|
static PyMethodDef TestMethods[] = {
|
||||||
{"raise_exception", raise_exception, METH_VARARGS},
|
{"raise_exception", raise_exception, METH_VARARGS},
|
||||||
{"test_config", (PyCFunction)test_config, METH_NOARGS},
|
{"test_config", (PyCFunction)test_config, METH_NOARGS},
|
||||||
|
@ -1695,6 +1708,7 @@ static PyMethodDef TestMethods[] = {
|
||||||
{"code_newempty", code_newempty, METH_VARARGS},
|
{"code_newempty", code_newempty, METH_VARARGS},
|
||||||
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
|
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
|
||||||
METH_VARARGS | METH_KEYWORDS},
|
METH_VARARGS | METH_KEYWORDS},
|
||||||
|
{"sequence_delitem", (PyCFunction)sequence_delitem, METH_VARARGS},
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1221,7 +1221,7 @@ instance_ass_item(PyInstanceObject *inst, Py_ssize_t i, PyObject *item)
|
||||||
if (func == NULL)
|
if (func == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
arg = PyInt_FromSsize_t(i);
|
arg = Py_BuildValue("(n)", i);
|
||||||
else
|
else
|
||||||
arg = Py_BuildValue("(nO)", i, item);
|
arg = Py_BuildValue("(nO)", i, item);
|
||||||
if (arg == NULL) {
|
if (arg == NULL) {
|
||||||
|
|
Loading…
Reference in New Issue