[Python-checkins] gh-106023: Remove _PyObject_FastCallTstate() function (#106273)

vstinner webhook-mailer at python.org
Fri Jun 30 06:29:02 EDT 2023


https://github.com/python/cpython/commit/80b3d8f337bef52d7c360b4ee86be873681f747a
commit: 80b3d8f337bef52d7c360b4ee86be873681f747a
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2023-06-30T12:28:59+02:00
summary:

gh-106023: Remove _PyObject_FastCallTstate() function (#106273)

files:
M Doc/c-api/call.rst
M Include/internal/pycore_call.h
M Python/sysmodule.c

diff --git a/Doc/c-api/call.rst b/Doc/c-api/call.rst
index 4dc66e318cd12..ac6242701c504 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 6058335cd4051..9c32035d474b3 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 8e3fbe3314a95..56d771f70ef53 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;



More information about the Python-checkins mailing list