summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Galindo Salgado <Pablogsal@gmail.com>2022-04-13 13:06:56 (GMT)
committerGitHub <noreply@github.com>2022-04-13 13:06:56 (GMT)
commit37a53fb6bd36964d97faad628d16db0b2b62704c (patch)
tree655b0dc3e24f9a7d7d37827473587c462f3919bd
parent54f67ad54366f1b9161edca283e19670e065e1b8 (diff)
downloadcpython-37a53fb6bd36964d97faad628d16db0b2b62704c.zip
cpython-37a53fb6bd36964d97faad628d16db0b2b62704c.tar.gz
cpython-37a53fb6bd36964d97faad628d16db0b2b62704c.tar.bz2
gh-91502: Add a new API to check if a frame is an entry frame (GH-91503)
-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)
{