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):
testme = AllTests()
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()),
which was only relevant for the native pthread TLS implementation.
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[] = {
{"raise_exception", raise_exception, METH_VARARGS},
{"test_config", (PyCFunction)test_config, METH_NOARGS},
{"code_newempty", code_newempty, METH_VARARGS},
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
METH_VARARGS | METH_KEYWORDS},
+ {"sequence_delitem", (PyCFunction)sequence_delitem, METH_VARARGS},
{NULL, NULL} /* sentinel */
};
if (func == NULL)
return -1;
if (item == NULL)
- arg = PyInt_FromSsize_t(i);
+ arg = Py_BuildValue("(n)", i);
else
arg = Py_BuildValue("(nO)", i, item);
if (arg == NULL) {