pyo3_ffi/cpython/
compile.rs

1#[cfg(not(any(PyPy, Py_3_10)))]
2use crate::object::PyObject;
3#[cfg(not(any(PyPy, Py_3_10)))]
4use crate::pyarena::*;
5#[cfg(not(any(PyPy, Py_3_10)))]
6use crate::pythonrun::*;
7#[cfg(not(any(PyPy, Py_3_10)))]
8use crate::PyCodeObject;
9#[cfg(not(any(PyPy, Py_3_10)))]
10use std::os::raw::c_char;
11use std::os::raw::c_int;
12
13// skipped non-limited PyCF_MASK
14// skipped non-limited PyCF_MASK_OBSOLETE
15// skipped non-limited PyCF_SOURCE_IS_UTF8
16// skipped non-limited PyCF_DONT_IMPLY_DEDENT
17// skipped non-limited PyCF_ONLY_AST
18// skipped non-limited PyCF_IGNORE_COOKIE
19// skipped non-limited PyCF_TYPE_COMMENTS
20// skipped non-limited PyCF_ALLOW_TOP_LEVEL_AWAIT
21// skipped non-limited PyCF_COMPILE_MASK
22
23#[repr(C)]
24#[derive(Copy, Clone)]
25pub struct PyCompilerFlags {
26    pub cf_flags: c_int,
27    #[cfg(Py_3_8)]
28    pub cf_feature_version: c_int,
29}
30
31// skipped non-limited _PyCompilerFlags_INIT
32
33#[cfg(all(Py_3_12, not(any(Py_3_13, PyPy, GraalPy))))]
34#[repr(C)]
35#[derive(Copy, Clone)]
36pub struct _PyCompilerSrcLocation {
37    pub lineno: c_int,
38    pub end_lineno: c_int,
39    pub col_offset: c_int,
40    pub end_col_offset: c_int,
41}
42
43// skipped SRC_LOCATION_FROM_AST
44
45#[cfg(not(any(PyPy, GraalPy, Py_3_13)))]
46#[repr(C)]
47#[derive(Copy, Clone)]
48pub struct PyFutureFeatures {
49    pub ff_features: c_int,
50    #[cfg(not(Py_3_12))]
51    pub ff_lineno: c_int,
52    #[cfg(Py_3_12)]
53    pub ff_location: _PyCompilerSrcLocation,
54}
55
56pub const FUTURE_NESTED_SCOPES: &str = "nested_scopes";
57pub const FUTURE_GENERATORS: &str = "generators";
58pub const FUTURE_DIVISION: &str = "division";
59pub const FUTURE_ABSOLUTE_IMPORT: &str = "absolute_import";
60pub const FUTURE_WITH_STATEMENT: &str = "with_statement";
61pub const FUTURE_PRINT_FUNCTION: &str = "print_function";
62pub const FUTURE_UNICODE_LITERALS: &str = "unicode_literals";
63pub const FUTURE_BARRY_AS_BDFL: &str = "barry_as_FLUFL";
64pub const FUTURE_GENERATOR_STOP: &str = "generator_stop";
65// skipped non-limited FUTURE_ANNOTATIONS
66
67extern "C" {
68    #[cfg(not(any(PyPy, Py_3_10)))]
69    pub fn PyNode_Compile(arg1: *mut _node, arg2: *const c_char) -> *mut PyCodeObject;
70
71    #[cfg(not(any(PyPy, Py_3_10)))]
72    pub fn PyAST_CompileEx(
73        _mod: *mut _mod,
74        filename: *const c_char,
75        flags: *mut PyCompilerFlags,
76        optimize: c_int,
77        arena: *mut PyArena,
78    ) -> *mut PyCodeObject;
79
80    #[cfg(not(any(PyPy, Py_3_10)))]
81    pub fn PyAST_CompileObject(
82        _mod: *mut _mod,
83        filename: *mut PyObject,
84        flags: *mut PyCompilerFlags,
85        optimize: c_int,
86        arena: *mut PyArena,
87    ) -> *mut PyCodeObject;
88
89    #[cfg(not(any(PyPy, Py_3_10)))]
90    pub fn PyFuture_FromAST(_mod: *mut _mod, filename: *const c_char) -> *mut PyFutureFeatures;
91
92    #[cfg(not(any(PyPy, Py_3_10)))]
93    pub fn PyFuture_FromASTObject(
94        _mod: *mut _mod,
95        filename: *mut PyObject,
96    ) -> *mut PyFutureFeatures;
97
98    // skipped non-limited _Py_Mangle
99    // skipped non-limited PY_INVALID_STACK_EFFECT
100
101    pub fn PyCompile_OpcodeStackEffect(opcode: c_int, oparg: c_int) -> c_int;
102
103    #[cfg(Py_3_8)]
104    pub fn PyCompile_OpcodeStackEffectWithJump(opcode: c_int, oparg: c_int, jump: c_int) -> c_int;
105
106    // skipped non-limited _PyASTOptimizeState
107    // skipped non-limited _PyAST_Optimize
108}