[Python-checkins] gh-91502: Add a new API to check if a frame is an entry frame (GH-91503)

pablogsal webhook-mailer at python.org
Wed Apr 13 09:07:06 EDT 2022


https://github.com/python/cpython/commit/37a53fb6bd36964d97faad628d16db0b2b62704c
commit: 37a53fb6bd36964d97faad628d16db0b2b62704c
branch: main
author: Pablo Galindo Salgado <Pablogsal at gmail.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2022-04-13T14:06:56+01:00
summary:

gh-91502: Add a new API to check if a frame is an entry frame (GH-91503)

files:
A Misc/NEWS.d/next/Core and Builtins/2022-04-13-11-15-09.gh-issue-91502.11YXHQ.rst
M Include/cpython/frameobject.h
M Objects/frameobject.c

diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h
index 01cf6c9b89ae4..9cd711e43559a 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 0000000000000..4edff6f005490
--- /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 7a4d2fac9382c..dc4ef8bcda541 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)
 {



More information about the Python-checkins mailing list