mirror of
https://github.com/python/cpython.git
synced 2026-01-31 19:52:13 +00:00
bpo-38644: Add _PyObject_Call() (GH-17089)
* Add pycore_call.h internal header file. * Add _PyObject_Call(): PyObject_Call() with tstate * Add _PyObject_CallNoArgTstate(): _PyObject_CallNoArg() with tstate * Add _PyObject_FastCallDictTstate(): _PyObject_FastCallDict() with tstate * _PyObject_Call_Prepend() now takes tstate * Replace _PyObject_FastCall() calls with _PyObject_VectorcallTstate() calls
This commit is contained in:
parent
b9e681261c
commit
4d231bcc77
10 changed files with 217 additions and 138 deletions
|
|
@ -137,7 +137,8 @@ PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, Py
|
|||
static inline PyObject *
|
||||
_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
|
||||
{
|
||||
return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
|
||||
PyThreadState *tstate = PyThreadState_GET();
|
||||
return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
|
||||
}
|
||||
|
||||
/* Call a callable without any arguments
|
||||
|
|
@ -145,7 +146,8 @@ _PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
|
|||
PyObject_CallNoArgs(). */
|
||||
static inline PyObject *
|
||||
_PyObject_CallNoArg(PyObject *func) {
|
||||
return _PyObject_Vectorcall(func, NULL, 0, NULL);
|
||||
PyThreadState *tstate = PyThreadState_GET();
|
||||
return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
static inline PyObject *
|
||||
|
|
@ -155,16 +157,11 @@ _PyObject_CallOneArg(PyObject *func, PyObject *arg)
|
|||
PyObject *_args[2];
|
||||
PyObject **args = _args + 1; // For PY_VECTORCALL_ARGUMENTS_OFFSET
|
||||
args[0] = arg;
|
||||
return _PyObject_Vectorcall(func, args,
|
||||
1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
|
||||
PyThreadState *tstate = PyThreadState_GET();
|
||||
size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
|
||||
return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
|
||||
}
|
||||
|
||||
PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
|
||||
PyObject *callable,
|
||||
PyObject *obj,
|
||||
PyObject *args,
|
||||
PyObject *kwargs);
|
||||
|
||||
PyAPI_FUNC(PyObject *) _PyObject_VectorcallMethod(
|
||||
PyObject *name, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue