Skip to content

Commit

Permalink
gh-106023: Remove _PyObject_FastCallTstate() function (#106273)
Browse files Browse the repository at this point in the history
  • Loading branch information
vstinner committed Jun 30, 2023
1 parent f3cf2dd commit 80b3d8f
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 30 deletions.
13 changes: 0 additions & 13 deletions Doc/c-api/call.rst
Expand Up @@ -113,19 +113,6 @@ function as with any other callable.
:c:func:`PyObject_Vectorcall` will usually be most efficient.


.. note::

In CPython 3.8, the vectorcall API and related functions were available
provisionally under names with a leading underscore:
``_PyObject_Vectorcall``, ``_Py_TPFLAGS_HAVE_VECTORCALL``,
``_PyObject_VectorcallMethod``, ``_PyVectorcall_Function``,
``_PyObject_CallOneArg``, ``_PyObject_CallMethodNoArgs``,
``_PyObject_CallMethodOneArg``.
Additionally, ``PyObject_VectorcallDict`` was available as
``_PyObject_FastCallDict``.
The old names are still defined as aliases of the new, non-underscored names.


Recursion Control
.................

Expand Down
11 changes: 1 addition & 10 deletions Include/internal/pycore_call.h
Expand Up @@ -117,8 +117,7 @@ _PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg

/* === Vectorcall protocol (PEP 590) ============================= */

// Call callable using tp_call. Arguments are like PyObject_Vectorcall()
// or PyObject_FastCallDict() (both forms are supported),
// Call callable using tp_call. Arguments are like PyObject_Vectorcall(),
// except that nargs is plainly the number of arguments without flags.
//
// Export for shared stdlib extensions like the math extension,
Expand Down Expand Up @@ -204,14 +203,6 @@ _PyObject_CallNoArgs(PyObject *func) {
}


static inline PyObject *
_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func,
PyObject *const *args, Py_ssize_t nargs)
{
EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
}

extern PyObject *const *
_PyStack_UnpackDict(PyThreadState *tstate,
PyObject *const *args, Py_ssize_t nargs,
Expand Down
12 changes: 5 additions & 7 deletions Python/sysmodule.c
Expand Up @@ -979,12 +979,6 @@ static PyObject *
call_trampoline(PyThreadState *tstate, PyObject* callback,
PyFrameObject *frame, int what, PyObject *arg)
{

PyObject *stack[3];
stack[0] = (PyObject *)frame;
stack[1] = whatstrings[what];
stack[2] = (arg != NULL) ? arg : Py_None;

/* Discard any previous modifications the frame's fast locals */
if (frame->f_fast_as_locals) {
if (PyFrame_FastToLocalsWithError(frame) < 0) {
Expand All @@ -993,7 +987,11 @@ call_trampoline(PyThreadState *tstate, PyObject* callback,
}

/* call the Python-level function */
PyObject *result = _PyObject_FastCallTstate(tstate, callback, stack, 3);
if (arg == NULL) {
arg = Py_None;
}
PyObject *args[3] = {(PyObject *)frame, whatstrings[what], arg};
PyObject *result = _PyObject_VectorcallTstate(tstate, callback, args, 3, NULL);

PyFrame_LocalsToFast(frame, 1);
return result;
Expand Down

0 comments on commit 80b3d8f

Please sign in to comment.