diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h index 01cf6c9b89a..9cd711e4355 100644 --- a/Include/cpython/frameobject.h +++ b/Include/cpython/frameobject.h @@ -19,6 +19,16 @@ PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); +/* -- Caveat emptor -- + * The concept of entry frames is an implementation detail of the CPython + * interpreter. This API is considered unstable and is provided for the + * convenience of debuggers, profilers and state-inspecting tools. Notice that + * this API can be changed in future minor versions if the underlying frame + * mechanism change or the concept of an 'entry frame' or its semantics becomes + * obsolete or outdated. */ + +PyAPI_FUNC(int) _PyFrame_IsEntryFrame(PyFrameObject *frame); + PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst b/Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst new file mode 100644 index 00000000000..4edff6f0054 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst @@ -0,0 +1,2 @@ +Add a new :c:func:`_PyFrame_IsEntryFrame` API function, to check if a +:c:type:`PyFrameObject` is an entry frame. Patch by Pablo Galindo. diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 7a4d2fac938..dc4ef8bcda5 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -1104,6 +1104,14 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) } } + +int _PyFrame_IsEntryFrame(PyFrameObject *frame) +{ + assert(frame != NULL); + return frame->f_frame->is_entry; +} + + PyCodeObject * PyFrame_GetCode(PyFrameObject *frame) {