pyo3_ffi/cpython/
pyframe.rs1#[cfg(any(Py_3_11, all(Py_3_9, not(PyPy))))]
2use crate::PyFrameObject;
3use crate::{PyObject, PyTypeObject, Py_TYPE};
4#[cfg(Py_3_12)]
5use std::ffi::c_char;
6use std::ffi::c_int;
7
8#[cfg(all(Py_3_11, not(PyPy)))]
10opaque_struct!(pub _PyInterpreterFrame);
11
12#[cfg(Py_3_13)]
13pub const PyUnstable_EXECUTABLE_KIND_SKIP: c_int = 0;
14#[cfg(Py_3_13)]
15pub const PyUnstable_EXECUTABLE_KIND_PY_FUNCTION: c_int = 1;
16#[cfg(Py_3_13)]
17pub const PyUnstable_EXECUTABLE_KIND_BUILTIN_FUNCTION: c_int = 3;
18#[cfg(Py_3_13)]
19pub const PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR: c_int = 4;
20#[cfg(Py_3_13)]
21pub const PyUnstable_EXECUTABLE_KINDS: c_int = 5;
22
23extern_libpython! {
24 pub static mut PyFrame_Type: PyTypeObject;
25
26 #[cfg(Py_3_13)]
27 pub static mut PyFrameLocalsProxy_Type: PyTypeObject;
28
29 #[cfg(Py_3_13)]
30 pub static PyUnstable_ExecutableKinds: [*const PyTypeObject; 6];
31}
32
33#[inline]
34pub unsafe fn PyFrame_Check(op: *mut PyObject) -> c_int {
35 (Py_TYPE(op) == &raw mut PyFrame_Type) as c_int
36}
37
38#[cfg(Py_3_13)]
39#[inline]
40pub unsafe fn PyFrameLocalsProxy_Check(op: *mut PyObject) -> c_int {
41 (Py_TYPE(op) == &raw mut PyFrameLocalsProxy_Type) as c_int
42}
43
44extern_libpython! {
45 #[cfg(all(Py_3_9, not(PyPy)))]
46 pub fn PyFrame_GetBack(frame: *mut PyFrameObject) -> *mut PyFrameObject;
47
48 #[cfg(Py_3_11)]
49 pub fn PyFrame_GetLocals(frame: *mut PyFrameObject) -> *mut PyObject;
50
51 #[cfg(Py_3_11)]
52 pub fn PyFrame_GetGlobals(frame: *mut PyFrameObject) -> *mut PyObject;
53
54 #[cfg(Py_3_11)]
55 pub fn PyFrame_GetBuiltins(frame: *mut PyFrameObject) -> *mut PyObject;
56
57 #[cfg(Py_3_11)]
58 pub fn PyFrame_GetGenerator(frame: *mut PyFrameObject) -> *mut PyObject;
59
60 #[cfg(Py_3_11)]
61 pub fn PyFrame_GetLasti(frame: *mut PyFrameObject) -> c_int;
62
63 #[cfg(Py_3_12)]
64 pub fn PyFrame_GetVar(frame: *mut PyFrameObject, name: *mut PyObject) -> *mut PyObject;
65
66 #[cfg(Py_3_12)]
67 pub fn PyFrame_GetVarString(frame: *mut PyFrameObject, name: *mut c_char) -> *mut PyObject;
68
69 #[cfg(Py_3_12)]
70 pub fn PyUnstable_InterpreterFrame_GetCode(frame: *mut _PyInterpreterFrame) -> *mut PyObject;
71
72 #[cfg(Py_3_12)]
73 pub fn PyUnstable_InterpreterFrame_GetLasti(frame: *mut _PyInterpreterFrame) -> *mut PyObject;
74
75 #[cfg(Py_3_12)]
76 pub fn PyUnstable_InterpreterFrame_GetLine(frame: *mut _PyInterpreterFrame) -> *mut PyObject;
77}