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