]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-91502: Add a new API to check if a frame is an entry frame (GH-91503)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Wed, 13 Apr 2022 13:06:56 +0000 (14:06 +0100)
committerGitHub <noreply@github.com>
Wed, 13 Apr 2022 13:06:56 +0000 (14:06 +0100)
Include/cpython/frameobject.h
Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst [new file with mode: 0644]
Objects/frameobject.c

index 01cf6c9b89ae434e00e3e6afe4d5e3102e818906..9cd711e43559a608db34ed5757e8a2d77b37b81c 100644 (file)
@@ -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 (file)
index 0000000..4edff6f
--- /dev/null
@@ -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.
index 7a4d2fac9382ce5c0dcf27b881d67aa09f2b5f5e..dc4ef8bcda541f64393234024534d2e34ce171f4 100644 (file)
@@ -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)
 {