pyo3_ffi/cpython/
frameobject.rs1#[cfg(not(GraalPy))]
2use crate::cpython::code::PyCodeObject;
3use crate::object::*;
4#[cfg(not(GraalPy))]
5use crate::pystate::PyThreadState;
6#[cfg(not(any(PyPy, GraalPy, Py_3_11)))]
7use std::os::raw::c_char;
8use std::os::raw::c_int;
9use std::ptr::addr_of_mut;
10
11#[cfg(not(any(PyPy, GraalPy, Py_3_11)))]
12pub type PyFrameState = c_char;
13
14#[repr(C)]
15#[derive(Copy, Clone)]
16#[cfg(not(any(PyPy, GraalPy, Py_3_11)))]
17pub struct PyTryBlock {
18 pub b_type: c_int,
19 pub b_handler: c_int,
20 pub b_level: c_int,
21}
22
23#[repr(C)]
24#[cfg(not(any(PyPy, GraalPy, Py_3_11)))]
25pub struct PyFrameObject {
26 pub ob_base: PyVarObject,
27 pub f_back: *mut PyFrameObject,
28 pub f_code: *mut PyCodeObject,
29 pub f_builtins: *mut PyObject,
30 pub f_globals: *mut PyObject,
31 pub f_locals: *mut PyObject,
32 pub f_valuestack: *mut *mut PyObject,
33
34 #[cfg(not(Py_3_10))]
35 pub f_stacktop: *mut *mut PyObject,
36 pub f_trace: *mut PyObject,
37 #[cfg(Py_3_10)]
38 pub f_stackdepth: c_int,
39 pub f_trace_lines: c_char,
40 pub f_trace_opcodes: c_char,
41
42 pub f_gen: *mut PyObject,
43
44 pub f_lasti: c_int,
45 pub f_lineno: c_int,
46 pub f_iblock: c_int,
47 #[cfg(not(Py_3_10))]
48 pub f_executing: c_char,
49 #[cfg(Py_3_10)]
50 pub f_state: PyFrameState,
51 pub f_blockstack: [PyTryBlock; crate::CO_MAXBLOCKS],
52 pub f_localsplus: [*mut PyObject; 1],
53}
54
55#[cfg(any(PyPy, GraalPy, Py_3_11))]
56opaque_struct!(PyFrameObject);
57
58#[cfg_attr(windows, link(name = "pythonXY"))]
63extern "C" {
64 pub static mut PyFrame_Type: PyTypeObject;
65}
66
67#[inline]
68pub unsafe fn PyFrame_Check(op: *mut PyObject) -> c_int {
69 (Py_TYPE(op) == addr_of_mut!(PyFrame_Type)) as c_int
70}
71
72extern "C" {
73 #[cfg(not(GraalPy))]
74 #[cfg_attr(PyPy, link_name = "PyPyFrame_New")]
75 pub fn PyFrame_New(
76 tstate: *mut PyThreadState,
77 code: *mut PyCodeObject,
78 globals: *mut PyObject,
79 locals: *mut PyObject,
80 ) -> *mut PyFrameObject;
81 pub fn PyFrame_BlockSetup(f: *mut PyFrameObject, _type: c_int, handler: c_int, level: c_int);
84 #[cfg(not(any(PyPy, GraalPy, Py_3_11)))]
85 pub fn PyFrame_BlockPop(f: *mut PyFrameObject) -> *mut PyTryBlock;
86
87 pub fn PyFrame_LocalsToFast(f: *mut PyFrameObject, clear: c_int);
88 pub fn PyFrame_FastToLocalsWithError(f: *mut PyFrameObject) -> c_int;
89 pub fn PyFrame_FastToLocals(f: *mut PyFrameObject);
90
91 #[cfg(not(Py_3_9))]
95 pub fn PyFrame_ClearFreeList() -> c_int;
96}