From 2b4f2f5fa4d1123c19bf0643cfa5a4fe8df4175c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 6 Apr 2022 13:58:07 +0200 Subject: Revert "bpo-46850: Move _PyEval_EvalFrameDefault() to internal C API (GH-32052)" (GH-32343) * Revert "bpo-46850: Move _PyInterpreterState_SetEvalFrameFunc() to internal C API (GH-32054)" This reverts commit f877b40e3f7e0d97878884d80fbec879a85ab7e8. * Revert "bpo-46850: Move _PyEval_EvalFrameDefault() to internal C API (GH-32052)" This reverts commit b9a5522dd952125a99ff554f01f311cae25f5a91. --- Doc/c-api/init.rst | 11 +---------- Doc/whatsnew/3.11.rst | 11 ----------- Include/cpython/ceval.h | 2 ++ Include/cpython/pystate.h | 10 ++++++++++ Include/internal/pycore_ceval.h | 5 ----- Include/internal/pycore_interp.h | 16 +--------------- Include/internal/pycore_pystate.h | 2 +- 7 files changed, 15 insertions(+), 42 deletions(-) diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index 82c4ace..3fda9c3 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -1228,25 +1228,18 @@ All of the following functions must be called after :c:func:`Py_Initialize`. .. versionadded:: 3.8 -.. c:type:: PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag) - - Internal C API. +.. c:type:: PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *frame, int throwflag) Type of a frame evaluation function. The *throwflag* parameter is used by the ``throw()`` method of generators: if non-zero, handle the current exception. - .. versionchanged:: 3.11 - The second parameter type becomes ``_PyInterpreterFrame``. - .. versionchanged:: 3.9 The function now takes a *tstate* parameter. .. c:function:: _PyFrameEvalFunction _PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp) - Internal C API. - Get the frame evaluation function. See the :pep:`523` "Adding a frame evaluation API to CPython". @@ -1255,8 +1248,6 @@ All of the following functions must be called after :c:func:`Py_Initialize`. .. c:function:: void _PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp, _PyFrameEvalFunction eval_frame) - Internal C API. - Set the frame evaluation function. See the :pep:`523` "Adding a frame evaluation API to CPython". diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index a572ff6..d580563 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -1338,17 +1338,6 @@ Porting to Python 3.11 * Distributors are encouraged to build Python with the optimized Blake2 library `libb2`_. -* Move the private undocumented ``_PyEval_EvalFrameDefault()`` function to the - internal C API. The function now uses the ``_PyInterpreterFrame`` type which - is part of the internal C API. - (Contributed by Victor Stinner in :issue:`46850`.) - -* Move the private ``_PyFrameEvalFunction`` type, and private - ``_PyInterpreterState_GetEvalFrameFunc()`` and - ``_PyInterpreterState_SetEvalFrameFunc()`` functions to the internal C API. - The ``_PyFrameEvalFunction`` callback function type now uses the - ``_PyInterpreterFrame`` type which is part of the internal C API. - (Contributed by Victor Stinner in :issue:`46850`.) Deprecated ---------- diff --git a/Include/cpython/ceval.h b/Include/cpython/ceval.h index 65aae2d..9d4eeaf 100644 --- a/Include/cpython/ceval.h +++ b/Include/cpython/ceval.h @@ -15,6 +15,8 @@ PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); flag was set, else return 0. */ PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); +PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, struct _PyInterpreterFrame *f, int exc); + PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index e346d74..1af21a2 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -259,6 +259,16 @@ PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); +/* Frame evaluation API */ + +typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, struct _PyInterpreterFrame *, int); + +PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc( + PyInterpreterState *interp); +PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc( + PyInterpreterState *interp, + _PyFrameEvalFunction eval_frame); + PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *interp); /* Get a copy of the current interpreter configuration. diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index b29b496..45d26a3 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -59,11 +59,6 @@ extern PyObject* _PyEval_BuiltinsFromGlobals( PyObject *globals); -PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault( - PyThreadState *tstate, - struct _PyInterpreterFrame *frame, - int throwflag); - static inline PyObject* _PyEval_EvalFrame(PyThreadState *tstate, struct _PyInterpreterFrame *frame, int throwflag) { diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index 592d438..d556279 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -17,9 +17,9 @@ extern "C" { #include "pycore_dict.h" // struct _Py_dict_state #include "pycore_exceptions.h" // struct _Py_exc_state #include "pycore_floatobject.h" // struct _Py_float_state -#include "pycore_gc.h" // struct _gc_runtime_state #include "pycore_genobject.h" // struct _Py_async_gen_state #include "pycore_gil.h" // struct _gil_runtime_state +#include "pycore_gc.h" // struct _gc_runtime_state #include "pycore_list.h" // struct _Py_list_state #include "pycore_tuple.h" // struct _Py_tuple_state #include "pycore_typeobject.h" // struct type_cache @@ -71,20 +71,6 @@ struct atexit_state { }; -/* Frame evaluation API (PEP 523) */ - -typedef PyObject* (*_PyFrameEvalFunction) ( - PyThreadState *tstate, - struct _PyInterpreterFrame *frame, - int throwflag); - -PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc( - PyInterpreterState *interp); -PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc( - PyInterpreterState *interp, - _PyFrameEvalFunction eval_frame); - - /* interpreter state */ /* PyInterpreterState holds the global state for one of the runtime's diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index c463347..c4bc53c 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -8,7 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_runtime.h" // _PyRuntime +#include "pycore_runtime.h" /* PyRuntimeState */ /* Check if the current thread is the main thread. -- cgit v0.12