1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4
5 #include "pycore_modsupport.h" // _PyArg_CheckPositional()
6
7 PyDoc_STRVAR(_testcapi_pyobject_fastcalldict__doc__,
8 "pyobject_fastcalldict($module, func, func_args, kwargs, /)\n"
9 "--\n"
10 "\n");
11
12 #define _TESTCAPI_PYOBJECT_FASTCALLDICT_METHODDEF \
13 {"pyobject_fastcalldict", _PyCFunction_CAST(_testcapi_pyobject_fastcalldict), METH_FASTCALL, _testcapi_pyobject_fastcalldict__doc__},
14
15 static PyObject *
16 _testcapi_pyobject_fastcalldict_impl(PyObject *module, PyObject *func,
17 PyObject *func_args, PyObject *kwargs);
18
19 static PyObject *
_testcapi_pyobject_fastcalldict(PyObject * module,PyObject * const * args,Py_ssize_t nargs)20 _testcapi_pyobject_fastcalldict(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
21 {
22 PyObject *return_value = NULL;
23 PyObject *func;
24 PyObject *func_args;
25 PyObject *__clinic_kwargs;
26
27 if (!_PyArg_CheckPositional("pyobject_fastcalldict", nargs, 3, 3)) {
28 goto exit;
29 }
30 func = args[0];
31 func_args = args[1];
32 __clinic_kwargs = args[2];
33 return_value = _testcapi_pyobject_fastcalldict_impl(module, func, func_args, __clinic_kwargs);
34
35 exit:
36 return return_value;
37 }
38
39 PyDoc_STRVAR(_testcapi_pyobject_vectorcall__doc__,
40 "pyobject_vectorcall($module, func, func_args, kwnames, /)\n"
41 "--\n"
42 "\n");
43
44 #define _TESTCAPI_PYOBJECT_VECTORCALL_METHODDEF \
45 {"pyobject_vectorcall", _PyCFunction_CAST(_testcapi_pyobject_vectorcall), METH_FASTCALL, _testcapi_pyobject_vectorcall__doc__},
46
47 static PyObject *
48 _testcapi_pyobject_vectorcall_impl(PyObject *module, PyObject *func,
49 PyObject *func_args, PyObject *kwnames);
50
51 static PyObject *
_testcapi_pyobject_vectorcall(PyObject * module,PyObject * const * args,Py_ssize_t nargs)52 _testcapi_pyobject_vectorcall(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
53 {
54 PyObject *return_value = NULL;
55 PyObject *func;
56 PyObject *func_args;
57 PyObject *__clinic_kwnames;
58
59 if (!_PyArg_CheckPositional("pyobject_vectorcall", nargs, 3, 3)) {
60 goto exit;
61 }
62 func = args[0];
63 func_args = args[1];
64 __clinic_kwnames = args[2];
65 return_value = _testcapi_pyobject_vectorcall_impl(module, func, func_args, __clinic_kwnames);
66
67 exit:
68 return return_value;
69 }
70
71 PyDoc_STRVAR(_testcapi_pyvectorcall_call__doc__,
72 "pyvectorcall_call($module, func, argstuple, kwargs=<unrepresentable>, /)\n"
73 "--\n"
74 "\n");
75
76 #define _TESTCAPI_PYVECTORCALL_CALL_METHODDEF \
77 {"pyvectorcall_call", _PyCFunction_CAST(_testcapi_pyvectorcall_call), METH_FASTCALL, _testcapi_pyvectorcall_call__doc__},
78
79 static PyObject *
80 _testcapi_pyvectorcall_call_impl(PyObject *module, PyObject *func,
81 PyObject *argstuple, PyObject *kwargs);
82
83 static PyObject *
_testcapi_pyvectorcall_call(PyObject * module,PyObject * const * args,Py_ssize_t nargs)84 _testcapi_pyvectorcall_call(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
85 {
86 PyObject *return_value = NULL;
87 PyObject *func;
88 PyObject *argstuple;
89 PyObject *__clinic_kwargs = NULL;
90
91 if (!_PyArg_CheckPositional("pyvectorcall_call", nargs, 2, 3)) {
92 goto exit;
93 }
94 func = args[0];
95 argstuple = args[1];
96 if (nargs < 3) {
97 goto skip_optional;
98 }
99 __clinic_kwargs = args[2];
100 skip_optional:
101 return_value = _testcapi_pyvectorcall_call_impl(module, func, argstuple, __clinic_kwargs);
102
103 exit:
104 return return_value;
105 }
106
107 PyDoc_STRVAR(_testcapi_VectorCallClass_set_vectorcall__doc__,
108 "set_vectorcall($self, type, /)\n"
109 "--\n"
110 "\n"
111 "Set self\'s vectorcall function for `type` to one that returns \"vectorcall\"");
112
113 #define _TESTCAPI_VECTORCALLCLASS_SET_VECTORCALL_METHODDEF \
114 {"set_vectorcall", (PyCFunction)_testcapi_VectorCallClass_set_vectorcall, METH_O, _testcapi_VectorCallClass_set_vectorcall__doc__},
115
116 static PyObject *
117 _testcapi_VectorCallClass_set_vectorcall_impl(PyObject *self,
118 PyTypeObject *type);
119
120 static PyObject *
_testcapi_VectorCallClass_set_vectorcall(PyObject * self,PyObject * arg)121 _testcapi_VectorCallClass_set_vectorcall(PyObject *self, PyObject *arg)
122 {
123 PyObject *return_value = NULL;
124 PyTypeObject *type;
125
126 if (!PyObject_TypeCheck(arg, &PyType_Type)) {
127 _PyArg_BadArgument("set_vectorcall", "argument", (&PyType_Type)->tp_name, arg);
128 goto exit;
129 }
130 type = (PyTypeObject *)arg;
131 return_value = _testcapi_VectorCallClass_set_vectorcall_impl(self, type);
132
133 exit:
134 return return_value;
135 }
136
137 PyDoc_STRVAR(_testcapi_make_vectorcall_class__doc__,
138 "make_vectorcall_class($module, base=<unrepresentable>, /)\n"
139 "--\n"
140 "\n"
141 "Create a class whose instances return \"tpcall\" when called.\n"
142 "\n"
143 "When the \"set_vectorcall\" method is called on an instance, a vectorcall\n"
144 "function that returns \"vectorcall\" will be installed.");
145
146 #define _TESTCAPI_MAKE_VECTORCALL_CLASS_METHODDEF \
147 {"make_vectorcall_class", _PyCFunction_CAST(_testcapi_make_vectorcall_class), METH_FASTCALL, _testcapi_make_vectorcall_class__doc__},
148
149 static PyObject *
150 _testcapi_make_vectorcall_class_impl(PyObject *module, PyTypeObject *base);
151
152 static PyObject *
_testcapi_make_vectorcall_class(PyObject * module,PyObject * const * args,Py_ssize_t nargs)153 _testcapi_make_vectorcall_class(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
154 {
155 PyObject *return_value = NULL;
156 PyTypeObject *base = NULL;
157
158 if (!_PyArg_CheckPositional("make_vectorcall_class", nargs, 0, 1)) {
159 goto exit;
160 }
161 if (nargs < 1) {
162 goto skip_optional;
163 }
164 if (!PyObject_TypeCheck(args[0], &PyType_Type)) {
165 _PyArg_BadArgument("make_vectorcall_class", "argument 1", (&PyType_Type)->tp_name, args[0]);
166 goto exit;
167 }
168 base = (PyTypeObject *)args[0];
169 skip_optional:
170 return_value = _testcapi_make_vectorcall_class_impl(module, base);
171
172 exit:
173 return return_value;
174 }
175
176 PyDoc_STRVAR(_testcapi_has_vectorcall_flag__doc__,
177 "has_vectorcall_flag($module, type, /)\n"
178 "--\n"
179 "\n"
180 "Return true iff Py_TPFLAGS_HAVE_VECTORCALL is set on the class.");
181
182 #define _TESTCAPI_HAS_VECTORCALL_FLAG_METHODDEF \
183 {"has_vectorcall_flag", (PyCFunction)_testcapi_has_vectorcall_flag, METH_O, _testcapi_has_vectorcall_flag__doc__},
184
185 static int
186 _testcapi_has_vectorcall_flag_impl(PyObject *module, PyTypeObject *type);
187
188 static PyObject *
_testcapi_has_vectorcall_flag(PyObject * module,PyObject * arg)189 _testcapi_has_vectorcall_flag(PyObject *module, PyObject *arg)
190 {
191 PyObject *return_value = NULL;
192 PyTypeObject *type;
193 int _return_value;
194
195 if (!PyObject_TypeCheck(arg, &PyType_Type)) {
196 _PyArg_BadArgument("has_vectorcall_flag", "argument", (&PyType_Type)->tp_name, arg);
197 goto exit;
198 }
199 type = (PyTypeObject *)arg;
200 _return_value = _testcapi_has_vectorcall_flag_impl(module, type);
201 if ((_return_value == -1) && PyErr_Occurred()) {
202 goto exit;
203 }
204 return_value = PyBool_FromLong((long)_return_value);
205
206 exit:
207 return return_value;
208 }
209 /*[clinic end generated code: output=210ae67caab177ba input=a9049054013a1b77]*/
210