1use crate::object::PyObject;
2use crate::pytypedefs::PyThreadState;
3use std::ffi::{c_char, c_int, c_void};
4
5extern_libpython! {
6 pub fn PyEval_EvalCode(
7 arg1: *mut PyObject,
8 arg2: *mut PyObject,
9 arg3: *mut PyObject,
10 ) -> *mut PyObject;
11
12 pub fn PyEval_EvalCodeEx(
13 co: *mut PyObject,
14 globals: *mut PyObject,
15 locals: *mut PyObject,
16 args: *const *mut PyObject,
17 argc: c_int,
18 kwds: *const *mut PyObject,
19 kwdc: c_int,
20 defs: *const *mut PyObject,
21 defc: c_int,
22 kwdefs: *mut PyObject,
23 closure: *mut PyObject,
24 ) -> *mut PyObject;
25
26 #[cfg(not(Py_3_13))]
27 #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
28 pub fn PyEval_CallObjectWithKeywords(
29 func: *mut PyObject,
30 obj: *mut PyObject,
31 kwargs: *mut PyObject,
32 ) -> *mut PyObject;
33}
34
35#[cfg(not(Py_3_13))]
36#[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
37#[inline]
38pub unsafe fn PyEval_CallObject(func: *mut PyObject, arg: *mut PyObject) -> *mut PyObject {
39 #[allow(deprecated)]
40 PyEval_CallObjectWithKeywords(func, arg, std::ptr::null_mut())
41}
42
43extern_libpython! {
44 #[cfg(not(Py_3_13))]
45 #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
46 pub fn PyEval_CallFunction(obj: *mut PyObject, format: *const c_char, ...) -> *mut PyObject;
47 #[cfg(not(Py_3_13))]
48 #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
49 pub fn PyEval_CallMethod(
50 obj: *mut PyObject,
51 methodname: *const c_char,
52 format: *const c_char,
53 ...
54 ) -> *mut PyObject;
55 pub fn PyEval_GetBuiltins() -> *mut PyObject;
56 pub fn PyEval_GetGlobals() -> *mut PyObject;
57 pub fn PyEval_GetLocals() -> *mut PyObject;
58 pub fn PyEval_GetFrame() -> *mut crate::PyFrameObject;
59
60 #[cfg(Py_3_13)]
61 pub fn PyEval_GetFrameBuiltins() -> *mut PyObject;
62 #[cfg(Py_3_13)]
63 pub fn PyEval_GetFrameGlobals() -> *mut PyObject;
64 #[cfg(Py_3_13)]
65 pub fn PyEval_GetFrameLocals() -> *mut PyObject;
66
67 pub fn Py_AddPendingCall(
68 func: Option<extern "C" fn(arg1: *mut c_void) -> c_int>,
69 arg: *mut c_void,
70 ) -> c_int;
71 pub fn Py_MakePendingCalls() -> c_int;
72
73 pub fn Py_SetRecursionLimit(arg1: c_int);
74 pub fn Py_GetRecursionLimit() -> c_int;
75
76 #[cfg(Py_3_9)]
77 pub fn Py_EnterRecursiveCall(arg1: *const c_char) -> c_int;
78 #[cfg(Py_3_9)]
79 pub fn Py_LeaveRecursiveCall();
80
81 pub fn PyEval_GetFuncName(arg1: *mut PyObject) -> *const c_char;
82 pub fn PyEval_GetFuncDesc(arg1: *mut PyObject) -> *const c_char;
83
84 pub fn PyEval_EvalFrame(arg1: *mut crate::PyFrameObject) -> *mut PyObject;
85 pub fn PyEval_EvalFrameEx(f: *mut crate::PyFrameObject, exc: c_int) -> *mut PyObject;
86
87 pub fn PyEval_SaveThread() -> *mut PyThreadState;
88 pub fn PyEval_RestoreThread(arg1: *mut PyThreadState);
89
90 #[cfg(not(Py_3_13))]
91 #[cfg_attr(
92 Py_3_9,
93 deprecated(
94 note = "Deprecated in Python 3.9, this function always returns true in Python 3.7 or newer."
95 )
96 )]
97 pub fn PyEval_ThreadsInitialized() -> c_int;
98 #[cfg_attr(
99 Py_3_9,
100 deprecated(
101 note = "Deprecated in Python 3.9, this function does nothing in Python 3.7 or newer."
102 )
103 )]
104 pub fn PyEval_InitThreads();
105 #[cfg(not(Py_3_13))]
106 #[deprecated(note = "Deprecated in Python 3.2")]
107 pub fn PyEval_AcquireLock();
108 #[cfg(not(Py_3_13))]
109 #[deprecated(note = "Deprecated in Python 3.2")]
110 pub fn PyEval_ReleaseLock();
111 pub fn PyEval_AcquireThread(tstate: *mut PyThreadState);
112 pub fn PyEval_ReleaseThread(tstate: *mut PyThreadState);
113}
114
115