gh-111666: Speed up BaseExceptionGroup.{derive,split,subgroup} (#111667)

This commit is contained in:
Nikita Sobolev 2023-11-04 12:59:46 +03:00 committed by GitHub
parent 890ef1b035
commit a28a3967ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 20 deletions

View file

@ -0,0 +1,3 @@
Speed up :meth:`BaseExceptionGroup.derive`,
:meth:`BaseExceptionGroup.subgroup`, and :meth:`BaseExceptionGroup.split` by
changing how they parse passed arguments.

View file

@ -876,13 +876,9 @@ BaseExceptionGroup_str(PyBaseExceptionGroupObject *self)
}
static PyObject *
BaseExceptionGroup_derive(PyObject *self_, PyObject *args)
BaseExceptionGroup_derive(PyObject *self_, PyObject *excs)
{
PyBaseExceptionGroupObject *self = _PyBaseExceptionGroupObject_cast(self_);
PyObject *excs = NULL;
if (!PyArg_ParseTuple(args, "O", &excs)) {
return NULL;
}
PyObject *init_args = PyTuple_Pack(2, self->msg, excs);
if (!init_args) {
return NULL;
@ -1176,13 +1172,8 @@ exceptiongroup_split_recursive(PyObject *exc,
}
static PyObject *
BaseExceptionGroup_split(PyObject *self, PyObject *args)
BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)
{
PyObject *matcher_value = NULL;
if (!PyArg_UnpackTuple(args, "split", 1, 1, &matcher_value)) {
return NULL;
}
_exceptiongroup_split_matcher_type matcher_type;
if (get_matcher_type(matcher_value, &matcher_type) < 0) {
return NULL;
@ -1207,13 +1198,8 @@ BaseExceptionGroup_split(PyObject *self, PyObject *args)
}
static PyObject *
BaseExceptionGroup_subgroup(PyObject *self, PyObject *args)
BaseExceptionGroup_subgroup(PyObject *self, PyObject *matcher_value)
{
PyObject *matcher_value = NULL;
if (!PyArg_UnpackTuple(args, "subgroup", 1, 1, &matcher_value)) {
return NULL;
}
_exceptiongroup_split_matcher_type matcher_type;
if (get_matcher_type(matcher_value, &matcher_type) < 0) {
return NULL;
@ -1488,9 +1474,9 @@ static PyMemberDef BaseExceptionGroup_members[] = {
static PyMethodDef BaseExceptionGroup_methods[] = {
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
{"derive", (PyCFunction)BaseExceptionGroup_derive, METH_VARARGS},
{"split", (PyCFunction)BaseExceptionGroup_split, METH_VARARGS},
{"subgroup", (PyCFunction)BaseExceptionGroup_subgroup, METH_VARARGS},
{"derive", (PyCFunction)BaseExceptionGroup_derive, METH_O},
{"split", (PyCFunction)BaseExceptionGroup_split, METH_O},
{"subgroup", (PyCFunction)BaseExceptionGroup_subgroup, METH_O},
{NULL}
};