summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Include/cpython/frameobject.h10
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst2
-rw-r--r--Objects/frameobject.c8
3 files changed, 20 insertions, 0 deletions
diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h
index 01cf6c9..9cd711e 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 0000000..4edff6f
--- /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 7a4d2fa..dc4ef8b 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)
{