Skip to main content

pyo3_ffi/cpython/
pythonrun.rs

1use crate::object::*;
2#[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
3use crate::pyarena::PyArena;
4use crate::PyCompilerFlags;
5#[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
6use crate::{_mod, _node};
7use core::ffi::{c_char, c_int};
8use libc::FILE;
9
10extern_libpython! {
11    pub fn PyRun_SimpleStringFlags(arg1: *const c_char, arg2: *mut PyCompilerFlags) -> c_int;
12    pub fn PyRun_AnyFileExFlags(
13        fp: *mut FILE,
14        filename: *const c_char,
15        closeit: c_int,
16        flags: *mut PyCompilerFlags,
17    ) -> c_int;
18    pub fn PyRun_SimpleFileExFlags(
19        fp: *mut FILE,
20        filename: *const c_char,
21        closeit: c_int,
22        flags: *mut PyCompilerFlags,
23    ) -> c_int;
24    pub fn PyRun_InteractiveOneFlags(
25        fp: *mut FILE,
26        filename: *const c_char,
27        flags: *mut PyCompilerFlags,
28    ) -> c_int;
29    pub fn PyRun_InteractiveOneObject(
30        fp: *mut FILE,
31        filename: *mut PyObject,
32        flags: *mut PyCompilerFlags,
33    ) -> c_int;
34    pub fn PyRun_InteractiveLoopFlags(
35        fp: *mut FILE,
36        filename: *const c_char,
37        flags: *mut PyCompilerFlags,
38    ) -> c_int;
39
40    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
41    pub fn PyParser_ASTFromString(
42        s: *const c_char,
43        filename: *const c_char,
44        start: c_int,
45        flags: *mut PyCompilerFlags,
46        arena: *mut PyArena,
47    ) -> *mut _mod;
48    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
49    pub fn PyParser_ASTFromStringObject(
50        s: *const c_char,
51        filename: *mut PyObject,
52        start: c_int,
53        flags: *mut PyCompilerFlags,
54        arena: *mut PyArena,
55    ) -> *mut _mod;
56    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
57    pub fn PyParser_ASTFromFile(
58        fp: *mut FILE,
59        filename: *const c_char,
60        enc: *const c_char,
61        start: c_int,
62        ps1: *const c_char,
63        ps2: *const c_char,
64        flags: *mut PyCompilerFlags,
65        errcode: *mut c_int,
66        arena: *mut PyArena,
67    ) -> *mut _mod;
68    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
69    pub fn PyParser_ASTFromFileObject(
70        fp: *mut FILE,
71        filename: *mut PyObject,
72        enc: *const c_char,
73        start: c_int,
74        ps1: *const c_char,
75        ps2: *const c_char,
76        flags: *mut PyCompilerFlags,
77        errcode: *mut c_int,
78        arena: *mut PyArena,
79    ) -> *mut _mod;
80
81    #[cfg_attr(PyPy, link_name = "PyPyRun_StringFlags")]
82    pub fn PyRun_StringFlags(
83        arg1: *const c_char,
84        arg2: c_int,
85        arg3: *mut PyObject,
86        arg4: *mut PyObject,
87        arg5: *mut PyCompilerFlags,
88    ) -> *mut PyObject;
89    #[cfg(not(any(PyPy, GraalPy)))]
90    pub fn PyRun_FileExFlags(
91        fp: *mut FILE,
92        filename: *const c_char,
93        start: c_int,
94        globals: *mut PyObject,
95        locals: *mut PyObject,
96        closeit: c_int,
97        flags: *mut PyCompilerFlags,
98    ) -> *mut PyObject;
99
100    // skipped Py_CompileString - there is a symbol defined for this since Python 3.13
101    // but the symbol is overridden by a macro definition to call Py_CompileStringExFlags
102    // inline (see below)
103
104    #[cfg(not(any(PyPy, GraalPy)))]
105    pub fn Py_CompileStringExFlags(
106        str: *const c_char,
107        filename: *const c_char,
108        start: c_int,
109        flags: *mut PyCompilerFlags,
110        optimize: c_int,
111    ) -> *mut PyObject;
112    pub fn Py_CompileStringObject(
113        str: *const c_char,
114        filename: *mut PyObject,
115        start: c_int,
116        flags: *mut PyCompilerFlags,
117        optimize: c_int,
118    ) -> *mut PyObject;
119}
120
121#[inline]
122#[cfg(not(any(PyPy, GraalPy)))]
123pub unsafe fn Py_CompileString(string: *const c_char, p: *const c_char, s: c_int) -> *mut PyObject {
124    Py_CompileStringExFlags(string, p, s, core::ptr::null_mut(), -1)
125}
126
127#[inline]
128#[cfg(not(any(PyPy, GraalPy)))]
129pub unsafe fn Py_CompileStringFlags(
130    string: *const c_char,
131    p: *const c_char,
132    s: c_int,
133    f: *mut PyCompilerFlags,
134) -> *mut PyObject {
135    Py_CompileStringExFlags(string, p, s, f, -1)
136}
137
138extern_libpython! {
139    #[cfg_attr(PyPy, link_name = "PyPyRun_String")]
140    pub fn PyRun_String(
141        string: *const c_char,
142        s: c_int,
143        g: *mut PyObject,
144        l: *mut PyObject,
145    ) -> *mut PyObject;
146    #[cfg(not(any(PyPy, GraalPy)))]
147    pub fn PyRun_AnyFile(fp: *mut FILE, name: *const c_char) -> c_int;
148    #[cfg(not(any(PyPy, GraalPy)))]
149    pub fn PyRun_AnyFileEx(fp: *mut FILE, name: *const c_char, closeit: c_int) -> c_int;
150    #[cfg(not(any(PyPy, GraalPy)))]
151    pub fn PyRun_AnyFileFlags(
152        arg1: *mut FILE,
153        arg2: *const c_char,
154        arg3: *mut PyCompilerFlags,
155    ) -> c_int;
156    #[cfg_attr(PyPy, link_name = "PyPyRun_SimpleString")]
157    pub fn PyRun_SimpleString(s: *const c_char) -> c_int;
158    #[cfg(not(any(PyPy, GraalPy)))]
159    pub fn PyRun_SimpleFile(f: *mut FILE, p: *const c_char) -> c_int;
160    #[cfg(not(any(PyPy, GraalPy)))]
161    pub fn PyRun_SimpleFileEx(f: *mut FILE, p: *const c_char, c: c_int) -> c_int;
162    #[cfg(not(any(PyPy, GraalPy)))]
163    pub fn PyRun_InteractiveOne(f: *mut FILE, p: *const c_char) -> c_int;
164    #[cfg(not(any(PyPy, GraalPy)))]
165    pub fn PyRun_InteractiveLoop(f: *mut FILE, p: *const c_char) -> c_int;
166    #[cfg_attr(PyPy, link_name = "PyPyRun_File")]
167    pub fn PyRun_File(
168        fp: *mut FILE,
169        p: *const c_char,
170        s: c_int,
171        g: *mut PyObject,
172        l: *mut PyObject,
173    ) -> *mut PyObject;
174    #[cfg(not(any(PyPy, GraalPy)))]
175    pub fn PyRun_FileEx(
176        fp: *mut FILE,
177        p: *const c_char,
178        s: c_int,
179        g: *mut PyObject,
180        l: *mut PyObject,
181        c: c_int,
182    ) -> *mut PyObject;
183    #[cfg(not(any(PyPy, GraalPy)))]
184    pub fn PyRun_FileFlags(
185        fp: *mut FILE,
186        p: *const c_char,
187        s: c_int,
188        g: *mut PyObject,
189        l: *mut PyObject,
190        flags: *mut PyCompilerFlags,
191    ) -> *mut PyObject;
192}
193
194// skipped macro PyRun_String
195// skipped macro PyRun_AnyFile
196// skipped macro PyRun_AnyFileEx
197// skipped macro PyRun_AnyFileFlags
198
199extern_libpython! {
200    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
201    #[deprecated(note = "Python 3.9")]
202    pub fn PyParser_SimpleParseStringFlags(
203        arg1: *const c_char,
204        arg2: c_int,
205        arg3: c_int,
206    ) -> *mut _node;
207    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
208    #[deprecated(note = "Python 3.9")]
209    pub fn PyParser_SimpleParseStringFlagsFilename(
210        arg1: *const c_char,
211        arg2: *const c_char,
212        arg3: c_int,
213        arg4: c_int,
214    ) -> *mut _node;
215    #[cfg(not(any(PyPy, GraalPy, Py_3_10)))]
216    #[deprecated(note = "Python 3.9")]
217    pub fn PyParser_SimpleParseFileFlags(
218        arg1: *mut FILE,
219        arg2: *const c_char,
220        arg3: c_int,
221        arg4: c_int,
222    ) -> *mut _node;
223
224    #[cfg(PyPy)]
225    #[cfg_attr(PyPy, link_name = "PyPy_CompileStringFlags")]
226    pub fn Py_CompileStringFlags(
227        string: *const c_char,
228        p: *const c_char,
229        s: c_int,
230        f: *mut PyCompilerFlags,
231    ) -> *mut PyObject;
232}