python27_sys/
frameobject.rs1use libc::c_int;
2
3use crate::code::{PyCodeObject, CO_MAXBLOCKS};
4use crate::object::*;
5use crate::pyport::Py_ssize_t;
6use crate::pystate::PyThreadState;
7
8#[repr(C)]
9#[derive(Copy, Clone)]
10pub struct PyTryBlock {
11 pub b_type: c_int,
12 pub b_handler: c_int,
13 pub b_level: c_int,
14}
15
16#[repr(C)]
17#[derive(Copy, Clone)]
18pub struct PyFrameObject {
19 #[cfg(py_sys_config = "Py_TRACE_REFS")]
20 pub _ob_next: *mut PyObject,
21 #[cfg(py_sys_config = "Py_TRACE_REFS")]
22 pub _ob_prev: *mut PyObject,
23 pub ob_refcnt: Py_ssize_t,
24 pub ob_type: *mut PyTypeObject,
25 pub ob_size: Py_ssize_t,
26 pub f_back: *mut PyFrameObject, pub f_code: *mut PyCodeObject, pub f_builtins: *mut PyObject, pub f_globals: *mut PyObject, pub f_locals: *mut PyObject, pub f_valuestack: *mut *mut PyObject, pub f_stacktop: *mut *mut PyObject,
36 pub f_trace: *mut PyObject, pub f_exc_type: *mut PyObject,
39 pub f_exc_value: *mut PyObject,
40 pub f_exc_traceback: *mut PyObject,
41
42 pub f_tstate: *mut PyThreadState,
43
44 pub f_lasti: c_int, pub f_lineno: c_int, pub f_iblock: c_int, pub f_blockstack: [PyTryBlock; CO_MAXBLOCKS], pub f_localsplus: [*mut PyObject; 1], }
55
56#[cfg_attr(windows, link(name = "pythonXY"))]
57extern "C" {
58 pub static mut PyFrame_Type: PyTypeObject;
59}
60
61#[inline]
62pub unsafe fn PyFrame_Check(op: *mut PyObject) -> c_int {
63 ((*op).ob_type == &mut PyFrame_Type) as c_int
64}
65
66ignore! {
67 #[inline]
68 pub unsafe fn PyFrame_IsRestricted(f: *mut PyFrameObject) -> c_int {
69 ((*f).f_builtins != (*(*(*f).f_tstate).interp).builtins) as c_int
70 }
71}
72
73#[cfg_attr(windows, link(name = "pythonXY"))]
74extern "C" {
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
82 pub fn PyFrame_BlockSetup(
83 f: *mut PyFrameObject,
84 _type: c_int,
85 handler: c_int,
86 level: c_int,
87 ) -> ();
88 pub fn PyFrame_BlockPop(f: *mut PyFrameObject) -> *mut PyTryBlock;
89
90 pub fn PyFrame_LocalsToFast(f: *mut PyFrameObject, clear: c_int) -> ();
91 pub fn PyFrame_FastToLocals(f: *mut PyFrameObject) -> ();
92
93 pub fn PyFrame_ClearFreeList() -> c_int;
94 pub fn PyFrame_GetLineNumber(f: *mut PyFrameObject) -> c_int;
95}