diff options
author | Victor Stinner <vstinner@python.org> | 2020-03-20 16:46:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-20 16:46:56 (GMT) |
commit | 6723e933c4d90a408cf3818362a0e4de6d84c932 (patch) | |
tree | fd3c18220235a2ad81a97a1a4728cb145c4fe4c8 | |
parent | fd1e1a18fa3befe5b6eeac32e0561e15c7e5164b (diff) | |
download | cpython-6723e933c4d90a408cf3818362a0e4de6d84c932.zip cpython-6723e933c4d90a408cf3818362a0e4de6d84c932.tar.gz cpython-6723e933c4d90a408cf3818362a0e4de6d84c932.tar.bz2 |
bpo-39946: Remove _PyThreadState_GetFrame (GH-19094)
Remove _PyRuntime.getframe hook and remove _PyThreadState_GetFrame
macro which was an alias to _PyRuntime.getframe. They were only
exposed by the internal C API. Remove also PyThreadFrameGetter type.
-rw-r--r-- | Doc/whatsnew/3.9.rst | 4 | ||||
-rw-r--r-- | Include/cpython/pystate.h | 2 | ||||
-rw-r--r-- | Include/internal/pycore_pystate.h | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/C API/2020-03-20-17-05-52.bpo-39946.3NS-Ls.rst | 3 | ||||
-rw-r--r-- | Python/ceval.c | 17 | ||||
-rw-r--r-- | Python/pystate.c | 16 | ||||
-rw-r--r-- | Python/traceback.c | 2 |
7 files changed, 14 insertions, 34 deletions
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 3e30f84..5c84ca1 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -533,6 +533,10 @@ Build and C API Changes scheduled calls. (Contributed by Victor Stinner in :issue:`39984`.) +* Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame`` + macro which was an alias to ``_PyRuntime.getframe``. They were only exposed + by the internal C API. Remove also ``PyThreadFrameGetter`` type. + (Contributed by Victor Stinner in :issue:`39946`.) Deprecated ========== diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index 96df0d9..de35296 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -179,8 +179,6 @@ PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); -typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); - /* Frame evaluation API */ typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, struct _frame *, int); diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 0073e20..50d906c 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -192,7 +192,6 @@ struct _gilstate_runtime_state { /* Assuming the current thread holds the GIL, this is the PyThreadState for the current thread. */ _Py_atomic_address tstate_current; - PyThreadFrameGetter getframe; /* The single PyInterpreterState used by this process' GILState implementation */ @@ -201,9 +200,6 @@ struct _gilstate_runtime_state { Py_tss_t autoTSSkey; }; -/* hook for PyEval_GetFrame(), requested for Psyco */ -#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe - /* Issue #26558: Flag to disable PyGILState_Check(). If set to non-zero, PyGILState_Check() always return 1. */ #define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled diff --git a/Misc/NEWS.d/next/C API/2020-03-20-17-05-52.bpo-39946.3NS-Ls.rst b/Misc/NEWS.d/next/C API/2020-03-20-17-05-52.bpo-39946.3NS-Ls.rst new file mode 100644 index 0000000..4f0e4b7 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2020-03-20-17-05-52.bpo-39946.3NS-Ls.rst @@ -0,0 +1,3 @@ +Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame`` +macro which was an alias to ``_PyRuntime.getframe``. They were only exposed +by the internal C API. Remove also ``PyThreadFrameGetter`` type. diff --git a/Python/ceval.c b/Python/ceval.c index c80ee4b..836457d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -4825,25 +4825,18 @@ _PyEval_GetAsyncGenFinalizer(void) return tstate->async_gen_finalizer; } -static PyFrameObject * -_PyEval_GetFrame(PyThreadState *tstate) -{ - _PyRuntimeState *runtime = tstate->interp->runtime; - return runtime->gilstate.getframe(tstate); -} - PyFrameObject * PyEval_GetFrame(void) { PyThreadState *tstate = _PyThreadState_GET(); - return _PyEval_GetFrame(tstate); + return tstate->frame; } PyObject * PyEval_GetBuiltins(void) { PyThreadState *tstate = _PyThreadState_GET(); - PyFrameObject *current_frame = _PyEval_GetFrame(tstate); + PyFrameObject *current_frame = tstate->frame; if (current_frame == NULL) return tstate->interp->builtins; else @@ -4869,7 +4862,7 @@ PyObject * PyEval_GetLocals(void) { PyThreadState *tstate = _PyThreadState_GET(); - PyFrameObject *current_frame = _PyEval_GetFrame(tstate); + PyFrameObject *current_frame = tstate->frame; if (current_frame == NULL) { _PyErr_SetString(tstate, PyExc_SystemError, "frame does not exist"); return NULL; @@ -4887,7 +4880,7 @@ PyObject * PyEval_GetGlobals(void) { PyThreadState *tstate = _PyThreadState_GET(); - PyFrameObject *current_frame = _PyEval_GetFrame(tstate); + PyFrameObject *current_frame = tstate->frame; if (current_frame == NULL) { return NULL; } @@ -4900,7 +4893,7 @@ int PyEval_MergeCompilerFlags(PyCompilerFlags *cf) { PyThreadState *tstate = _PyThreadState_GET(); - PyFrameObject *current_frame = _PyEval_GetFrame(tstate); + PyFrameObject *current_frame = tstate->frame; int result = cf->cf_flags != 0; if (current_frame != NULL) { diff --git a/Python/pystate.c b/Python/pystate.c index eea666b..6331a85 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -546,13 +546,6 @@ PyInterpreterState_GetDict(PyInterpreterState *interp) return interp->dict; } -/* Default implementation for _PyThreadState_GetFrame */ -static struct _frame * -threadstate_getframe(PyThreadState *self) -{ - return self->frame; -} - static PyThreadState * new_threadstate(PyInterpreterState *interp, int init) { @@ -562,10 +555,6 @@ new_threadstate(PyInterpreterState *interp, int init) return NULL; } - if (_PyThreadState_GetFrame == NULL) { - _PyThreadState_GetFrame = threadstate_getframe; - } - tstate->interp = interp; tstate->frame = NULL; @@ -1000,9 +989,6 @@ PyInterpreterState * PyThreadState_GetInterpreter(PyThreadState *tstate) { assert(tstate != NULL); - if (tstate == NULL) { - return NULL; - } return tstate->interp; } @@ -1011,7 +997,7 @@ struct _frame* PyThreadState_GetFrame(PyThreadState *tstate) { assert(tstate != NULL); - return _PyThreadState_GetFrame(tstate); + return tstate->frame; } diff --git a/Python/traceback.c b/Python/traceback.c index 8aaee12..f88ba1d 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -801,7 +801,7 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) PUTS(fd, "Stack (most recent call first):\n"); } - frame = _PyThreadState_GetFrame(tstate); + frame = tstate->frame; if (frame == NULL) { PUTS(fd, "<no Python frame>\n"); return; |