From 6723e933c4d90a408cf3818362a0e4de6d84c932 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 20 Mar 2020 17:46:56 +0100 Subject: 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. --- Python/ceval.c | 17 +++++------------ Python/pystate.c | 16 +--------------- Python/traceback.c | 2 +- 3 files changed, 7 insertions(+), 28 deletions(-) (limited to 'Python') diff --git a/Python/ceval.c b/Python/ceval.c index c80ee4b463..836457d1a5 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 eea666b7e5..6331a854c8 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 8aaee12031..f88ba1d0ad 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, "\n"); return; -- cgit v1.2.1