/* Frame object interface */ #ifndef Py_CPYTHON_FRAMEOBJECT_H # error "this header file must not be included directly" #endif struct _PyInterpreterFrame; /* Standard object interface */ PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, PyObject *, PyObject *); /* The rest of the interface is specific for frame objects */ /* Conversions between "fast locals" and locals in dictionary */ 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 *); /* 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(PyObject *) 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);