Skip to main content

pyforge_ffi/cpython/
pythonrun.rs

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