[Python-checkins] gh-104469: Convert_testcapi/vectorcall.c to use AC (gh-106557)

corona10 webhook-mailer at python.org
Sun Jul 9 08:08:21 EDT 2023


https://github.com/python/cpython/commit/d137c2cae28b79555433079d917c3e0614bdcd61
commit: d137c2cae28b79555433079d917c3e0614bdcd61
branch: main
author: littlebutt's workshop <luogan199686 at gmail.com>
committer: corona10 <donghee.na92 at gmail.com>
date: 2023-07-09T21:08:18+09:00
summary:

gh-104469: Convert_testcapi/vectorcall.c to use AC (gh-106557)

files:
M Modules/_testcapi/clinic/vectorcall.c.h
M Modules/_testcapi/vectorcall.c

diff --git a/Modules/_testcapi/clinic/vectorcall.c.h b/Modules/_testcapi/clinic/vectorcall.c.h
index 765afeda9b306..728c0d382565a 100644
--- a/Modules/_testcapi/clinic/vectorcall.c.h
+++ b/Modules/_testcapi/clinic/vectorcall.c.h
@@ -8,6 +8,106 @@ preserve
 #endif
 
 
+PyDoc_STRVAR(_testcapi_pyobject_fastcalldict__doc__,
+"pyobject_fastcalldict($module, func, func_args, kwargs, /)\n"
+"--\n"
+"\n");
+
+#define _TESTCAPI_PYOBJECT_FASTCALLDICT_METHODDEF    \
+    {"pyobject_fastcalldict", _PyCFunction_CAST(_testcapi_pyobject_fastcalldict), METH_FASTCALL, _testcapi_pyobject_fastcalldict__doc__},
+
+static PyObject *
+_testcapi_pyobject_fastcalldict_impl(PyObject *module, PyObject *func,
+                                     PyObject *func_args, PyObject *kwargs);
+
+static PyObject *
+_testcapi_pyobject_fastcalldict(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *func;
+    PyObject *func_args;
+    PyObject *__clinic_kwargs;
+
+    if (!_PyArg_CheckPositional("pyobject_fastcalldict", nargs, 3, 3)) {
+        goto exit;
+    }
+    func = args[0];
+    func_args = args[1];
+    __clinic_kwargs = args[2];
+    return_value = _testcapi_pyobject_fastcalldict_impl(module, func, func_args, __clinic_kwargs);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_testcapi_pyobject_vectorcall__doc__,
+"pyobject_vectorcall($module, func, func_args, kwnames, /)\n"
+"--\n"
+"\n");
+
+#define _TESTCAPI_PYOBJECT_VECTORCALL_METHODDEF    \
+    {"pyobject_vectorcall", _PyCFunction_CAST(_testcapi_pyobject_vectorcall), METH_FASTCALL, _testcapi_pyobject_vectorcall__doc__},
+
+static PyObject *
+_testcapi_pyobject_vectorcall_impl(PyObject *module, PyObject *func,
+                                   PyObject *func_args, PyObject *kwnames);
+
+static PyObject *
+_testcapi_pyobject_vectorcall(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *func;
+    PyObject *func_args;
+    PyObject *__clinic_kwnames;
+
+    if (!_PyArg_CheckPositional("pyobject_vectorcall", nargs, 3, 3)) {
+        goto exit;
+    }
+    func = args[0];
+    func_args = args[1];
+    __clinic_kwnames = args[2];
+    return_value = _testcapi_pyobject_vectorcall_impl(module, func, func_args, __clinic_kwnames);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_testcapi_pyvectorcall_call__doc__,
+"pyvectorcall_call($module, func, argstuple, kwargs=<unrepresentable>, /)\n"
+"--\n"
+"\n");
+
+#define _TESTCAPI_PYVECTORCALL_CALL_METHODDEF    \
+    {"pyvectorcall_call", _PyCFunction_CAST(_testcapi_pyvectorcall_call), METH_FASTCALL, _testcapi_pyvectorcall_call__doc__},
+
+static PyObject *
+_testcapi_pyvectorcall_call_impl(PyObject *module, PyObject *func,
+                                 PyObject *argstuple, PyObject *kwargs);
+
+static PyObject *
+_testcapi_pyvectorcall_call(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *func;
+    PyObject *argstuple;
+    PyObject *__clinic_kwargs = NULL;
+
+    if (!_PyArg_CheckPositional("pyvectorcall_call", nargs, 2, 3)) {
+        goto exit;
+    }
+    func = args[0];
+    argstuple = args[1];
+    if (nargs < 3) {
+        goto skip_optional;
+    }
+    __clinic_kwargs = args[2];
+skip_optional:
+    return_value = _testcapi_pyvectorcall_call_impl(module, func, argstuple, __clinic_kwargs);
+
+exit:
+    return return_value;
+}
+
 PyDoc_STRVAR(_testcapi_VectorCallClass_set_vectorcall__doc__,
 "set_vectorcall($self, type, /)\n"
 "--\n"
@@ -110,4 +210,4 @@ _testcapi_has_vectorcall_flag(PyObject *module, PyObject *arg)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=609569aa9942584f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=beaf6beac3d13c25 input=a9049054013a1b77]*/
diff --git a/Modules/_testcapi/vectorcall.c b/Modules/_testcapi/vectorcall.c
index 4935fd1b6a7ba..5ee468bd28c85 100644
--- a/Modules/_testcapi/vectorcall.c
+++ b/Modules/_testcapi/vectorcall.c
@@ -4,6 +4,10 @@
 #include "structmember.h"           // PyMemberDef
 #include <stddef.h>                 // offsetof
 
+/*[clinic input]
+module _testcapi
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6361033e795369fc]*/
 
 /* Test PEP 590 - Vectorcall */
 
@@ -25,18 +29,22 @@ fastcall_args(PyObject *args, PyObject ***stack, Py_ssize_t *nargs)
     return 0;
 }
 
+/*[clinic input]
+_testcapi.pyobject_fastcalldict
+    func: object
+    func_args: object
+    kwargs: object
+    /
+[clinic start generated code]*/
 
 static PyObject *
-test_pyobject_fastcalldict(PyObject *self, PyObject *args)
+_testcapi_pyobject_fastcalldict_impl(PyObject *module, PyObject *func,
+                                     PyObject *func_args, PyObject *kwargs)
+/*[clinic end generated code: output=35902ece94de4418 input=b9c0196ca7d5f9e4]*/
 {
-    PyObject *func, *func_args, *kwargs;
     PyObject **stack;
     Py_ssize_t nargs;
 
-    if (!PyArg_ParseTuple(args, "OOO", &func, &func_args, &kwargs)) {
-        return NULL;
-    }
-
     if (fastcall_args(func_args, &stack, &nargs) < 0) {
         return NULL;
     }
@@ -52,17 +60,22 @@ test_pyobject_fastcalldict(PyObject *self, PyObject *args)
     return PyObject_VectorcallDict(func, stack, nargs, kwargs);
 }
 
+/*[clinic input]
+_testcapi.pyobject_vectorcall
+    func: object
+    func_args: object
+    kwnames: object
+    /
+[clinic start generated code]*/
+
 static PyObject *
-test_pyobject_vectorcall(PyObject *self, PyObject *args)
+_testcapi_pyobject_vectorcall_impl(PyObject *module, PyObject *func,
+                                   PyObject *func_args, PyObject *kwnames)
+/*[clinic end generated code: output=ff77245bc6afe0d8 input=a0668dfef625764c]*/
 {
-    PyObject *func, *func_args, *kwnames = NULL;
     PyObject **stack;
     Py_ssize_t nargs, nkw;
 
-    if (!PyArg_ParseTuple(args, "OOO", &func, &func_args, &kwnames)) {
-        return NULL;
-    }
-
     if (fastcall_args(func_args, &stack, &nargs) < 0) {
         return NULL;
     }
@@ -103,17 +116,19 @@ function_setvectorcall(PyObject *self, PyObject *func)
     Py_RETURN_NONE;
 }
 
+/*[clinic input]
+_testcapi.pyvectorcall_call
+    func: object
+    argstuple: object
+    kwargs: object = NULL
+    /
+[clinic start generated code]*/
+
 static PyObject *
-test_pyvectorcall_call(PyObject *self, PyObject *args)
+_testcapi_pyvectorcall_call_impl(PyObject *module, PyObject *func,
+                                 PyObject *argstuple, PyObject *kwargs)
+/*[clinic end generated code: output=809046fe78511306 input=4376ee7cabd698ce]*/
 {
-    PyObject *func;
-    PyObject *argstuple;
-    PyObject *kwargs = NULL;
-
-    if (!PyArg_ParseTuple(args, "OO|O", &func, &argstuple, &kwargs)) {
-        return NULL;
-    }
-
     if (!PyTuple_Check(argstuple)) {
         PyErr_SetString(PyExc_TypeError, "args must be a tuple");
         return NULL;
@@ -242,10 +257,10 @@ _testcapi_has_vectorcall_flag_impl(PyObject *module, PyTypeObject *type)
 }
 
 static PyMethodDef TestMethods[] = {
-    {"pyobject_fastcalldict", test_pyobject_fastcalldict, METH_VARARGS},
-    {"pyobject_vectorcall", test_pyobject_vectorcall, METH_VARARGS},
+    _TESTCAPI_PYOBJECT_FASTCALLDICT_METHODDEF
+    _TESTCAPI_PYOBJECT_VECTORCALL_METHODDEF
     {"function_setvectorcall", function_setvectorcall, METH_O},
-    {"pyvectorcall_call", test_pyvectorcall_call, METH_VARARGS},
+    _TESTCAPI_PYVECTORCALL_CALL_METHODDEF
     _TESTCAPI_MAKE_VECTORCALL_CLASS_METHODDEF
     _TESTCAPI_HAS_VECTORCALL_FLAG_METHODDEF
     {NULL},



More information about the Python-checkins mailing list