From dcb196878c8e84e3eabb58739da83aa7ad4728c7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 30 Jun 2023 11:48:55 +0200 Subject: [PATCH] gh-106023: Remove _PyObject_FastCallTstate() function --- Doc/c-api/call.rst | 13 ------------- Include/internal/pycore_call.h | 11 +---------- Python/sysmodule.c | 12 +++++------- 3 files changed, 6 insertions(+), 30 deletions(-) diff --git a/Doc/c-api/call.rst b/Doc/c-api/call.rst index 4dc66e318cd12e..ac6242701c5047 100644 --- a/Doc/c-api/call.rst +++ b/Doc/c-api/call.rst @@ -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 ................. diff --git a/Include/internal/pycore_call.h b/Include/internal/pycore_call.h index 6058335cd4051a..9c32035d474b3c 100644 --- a/Include/internal/pycore_call.h +++ b/Include/internal/pycore_call.h @@ -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, @@ -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, diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 8e3fbe3314a951..56d771f70ef538 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -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) { @@ -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; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy