Skip to main content

pyo3_ffi/cpython/
pyframe.rs

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