[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