[Python-checkins] bpo-47057: Use FASTCALL convention for FutureIter.throw() (GH-31973)
asvetlov
webhook-mailer at python.org
Sat Mar 19 08:01:51 EDT 2022
https://github.com/python/cpython/commit/0a8b8e0d262eae83ffbc6b414a1f5747cdbd1d88
commit: 0a8b8e0d262eae83ffbc6b414a1f5747cdbd1d88
branch: main
author: Andrew Svetlov <andrew.svetlov at gmail.com>
committer: asvetlov <andrew.svetlov at gmail.com>
date: 2022-03-19T14:01:46+02:00
summary:
bpo-47057: Use FASTCALL convention for FutureIter.throw() (GH-31973)
Co-authored-by: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2022-03-18-14-22-38.bpo-47057.n-IHbt.rst
M Modules/_asynciomodule.c
diff --git a/Misc/NEWS.d/next/Library/2022-03-18-14-22-38.bpo-47057.n-IHbt.rst b/Misc/NEWS.d/next/Library/2022-03-18-14-22-38.bpo-47057.n-IHbt.rst
new file mode 100644
index 0000000000000..b404b45e7cee4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-03-18-14-22-38.bpo-47057.n-IHbt.rst
@@ -0,0 +1 @@
+Use FASTCALL convention for ``FutureIter.throw()``
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 24119782d9c4d..c3e9cb2fa2a30 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -1637,18 +1637,23 @@ FutureIter_send(futureiterobject *self, PyObject *unused)
}
static PyObject *
-FutureIter_throw(futureiterobject *self, PyObject *args)
+FutureIter_throw(futureiterobject *self, PyObject *const *args, Py_ssize_t nargs)
{
PyObject *type, *val = NULL, *tb = NULL;
- if (!PyArg_ParseTuple(args, "O|OO", &type, &val, &tb))
+ if (!_PyArg_CheckPositional("throw", nargs, 1, 3)) {
return NULL;
+ }
- if (val == Py_None) {
- val = NULL;
+ type = args[0];
+ if (nargs == 3) {
+ val = args[1];
+ tb = args[2];
+ }
+ else if (nargs == 2) {
+ val = args[1];
}
- if (tb == Py_None) {
- tb = NULL;
- } else if (tb != NULL && !PyTraceBack_Check(tb)) {
+
+ if (tb != NULL && !PyTraceBack_Check(tb)) {
PyErr_SetString(PyExc_TypeError, "throw() third argument must be a traceback");
return NULL;
}
@@ -1708,7 +1713,7 @@ FutureIter_traverse(futureiterobject *it, visitproc visit, void *arg)
static PyMethodDef FutureIter_methods[] = {
{"send", (PyCFunction)FutureIter_send, METH_O, NULL},
- {"throw", (PyCFunction)FutureIter_throw, METH_VARARGS, NULL},
+ {"throw", (PyCFunction)(void(*)(void))FutureIter_throw, METH_FASTCALL, NULL},
{"close", (PyCFunction)FutureIter_close, METH_NOARGS, NULL},
{NULL, NULL} /* Sentinel */
};
More information about the Python-checkins
mailing list