pyforge_ffi/cpython/
code.rs1use crate::object::*;
2use crate::pyport::Py_ssize_t;
3
4use crate::PyCodeObject;
5use std::ffi::c_char;
6use std::ffi::{c_int, c_void};
7
8pub const CO_OPTIMIZED: c_int = 0x0001;
35pub const CO_NEWLOCALS: c_int = 0x0002;
36pub const CO_VARARGS: c_int = 0x0004;
37pub const CO_VARKEYWORDS: c_int = 0x0008;
38pub const CO_NESTED: c_int = 0x0010;
39pub const CO_GENERATOR: c_int = 0x0020;
40pub const CO_NOFREE: c_int = 0x0040;
46pub const CO_COROUTINE: c_int = 0x0080;
49pub const CO_ITERABLE_COROUTINE: c_int = 0x0100;
50pub const CO_ASYNC_GENERATOR: c_int = 0x0200;
51
52pub const CO_FUTURE_DIVISION: c_int = 0x2000;
53pub const CO_FUTURE_ABSOLUTE_IMPORT: c_int = 0x4000; pub const CO_FUTURE_WITH_STATEMENT: c_int = 0x8000;
55pub const CO_FUTURE_PRINT_FUNCTION: c_int = 0x1_0000;
56pub const CO_FUTURE_UNICODE_LITERALS: c_int = 0x2_0000;
57
58pub const CO_FUTURE_BARRY_AS_BDFL: c_int = 0x4_0000;
59pub const CO_FUTURE_GENERATOR_STOP: c_int = 0x8_0000;
60pub const CO_MAXBLOCKS: usize = 20;
64
65extern_libpython! {
66 pub static mut PyCode_Type: PyTypeObject;
67}
68
69#[inline]
70pub unsafe fn PyCode_Check(op: *mut PyObject) -> c_int {
71 (Py_TYPE(op) == &raw mut PyCode_Type) as c_int
72}
73
74extern_libpython! {
77 pub fn PyCode_New(
78 argcount: c_int,
79 kwonlyargcount: c_int,
80 nlocals: c_int,
81 stacksize: c_int,
82 flags: c_int,
83 code: *mut PyObject,
84 consts: *mut PyObject,
85 names: *mut PyObject,
86 varnames: *mut PyObject,
87 freevars: *mut PyObject,
88 cellvars: *mut PyObject,
89 filename: *mut PyObject,
90 name: *mut PyObject,
91 firstlineno: c_int,
92 lnotab: *mut PyObject,
93 ) -> *mut PyCodeObject;
94 pub fn PyCode_NewWithPosOnlyArgs(
95 argcount: c_int,
96 posonlyargcount: c_int,
97 kwonlyargcount: c_int,
98 nlocals: c_int,
99 stacksize: c_int,
100 flags: c_int,
101 code: *mut PyObject,
102 consts: *mut PyObject,
103 names: *mut PyObject,
104 varnames: *mut PyObject,
105 freevars: *mut PyObject,
106 cellvars: *mut PyObject,
107 filename: *mut PyObject,
108 name: *mut PyObject,
109 firstlineno: c_int,
110 lnotab: *mut PyObject,
111 ) -> *mut PyCodeObject;
112 pub fn PyCode_NewEmpty(
113 filename: *const c_char,
114 funcname: *const c_char,
115 firstlineno: c_int,
116 ) -> *mut PyCodeObject;
117 pub fn PyCode_Addr2Line(arg1: *mut PyCodeObject, arg2: c_int) -> c_int;
118 pub fn PyCode_Optimize(
122 code: *mut PyObject,
123 consts: *mut PyObject,
124 names: *mut PyObject,
125 lnotab: *mut PyObject,
126 ) -> *mut PyObject;
127 pub fn _PyCode_GetExtra(
128 code: *mut PyObject,
129 index: Py_ssize_t,
130 extra: *const *mut c_void,
131 ) -> c_int;
132 pub fn _PyCode_SetExtra(code: *mut PyObject, index: Py_ssize_t, extra: *mut c_void) -> c_int;
133}