summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2023-05-05 16:53:07 (GMT)
committerGitHub <noreply@github.com>2023-05-05 16:53:07 (GMT)
commita0df9ee8fc77443510ab7e9ba8fd830f255a8fec (patch)
tree2af48b491e6dcd471fd16f04e6ae87a85b1097cd /Include
parent45a9e3834a6ed20ee250e2e5a8583dffcef0eb73 (diff)
downloadcpython-a0df9ee8fc77443510ab7e9ba8fd830f255a8fec.zip
cpython-a0df9ee8fc77443510ab7e9ba8fd830f255a8fec.tar.gz
cpython-a0df9ee8fc77443510ab7e9ba8fd830f255a8fec.tar.bz2
GH-96803: Add three C-API functions to make _PyInterpreterFrame less opaque for users of PEP 523. (GH-96849)
Diffstat (limited to 'Include')
-rw-r--r--Include/cpython/frameobject.h17
-rw-r--r--Include/internal/pycore_frame.h2
2 files changed, 17 insertions, 2 deletions
diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h
index 4e19535..6f3efe3 100644
--- a/Include/cpython/frameobject.h
+++ b/Include/cpython/frameobject.h
@@ -4,6 +4,8 @@
# error "this header file must not be included directly"
#endif
+struct _PyInterpreterFrame;
+
/* Standard object interface */
PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
@@ -27,3 +29,18 @@ PyAPI_FUNC(int) _PyFrame_IsEntryFrame(PyFrameObject *frame);
PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
+
+/* The following functions are for use by debuggers and other tools
+ * implementing custom frame evaluators with PEP 523. */
+
+/* Returns the code object of the frame (strong reference).
+ * Does not raise an exception. */
+PyAPI_FUNC(PyCodeObject *) PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
+
+/* Returns a byte ofsset into the last executed instruction.
+ * Does not raise an exception. */
+PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
+
+/* Returns the currently executing line number, or -1 if there is no line number.
+ * Does not raise an exception. */
+PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h
index d8d7fe9..3d3cbbf 100644
--- a/Include/internal/pycore_frame.h
+++ b/Include/internal/pycore_frame.h
@@ -265,8 +265,6 @@ _PyFrame_PushUnchecked(PyThreadState *tstate, PyFunctionObject *func, int null_l
return new_frame;
}
-int _PyInterpreterFrame_GetLine(_PyInterpreterFrame *frame);
-
static inline
PyGenObject *_PyFrame_GetGenerator(_PyInterpreterFrame *frame)
{