pyo3_ffi/
ceval.rs

1use crate::object::PyObject;
2use crate::pystate::PyThreadState;
3use std::os::raw::{c_char, c_int, c_void};
4
5extern "C" {
6    #[cfg_attr(PyPy, link_name = "PyPyEval_EvalCode")]
7    pub fn PyEval_EvalCode(
8        arg1: *mut PyObject,
9        arg2: *mut PyObject,
10        arg3: *mut PyObject,
11    ) -> *mut PyObject;
12
13    pub fn PyEval_EvalCodeEx(
14        co: *mut PyObject,
15        globals: *mut PyObject,
16        locals: *mut PyObject,
17        args: *const *mut PyObject,
18        argc: c_int,
19        kwds: *const *mut PyObject,
20        kwdc: c_int,
21        defs: *const *mut PyObject,
22        defc: c_int,
23        kwdefs: *mut PyObject,
24        closure: *mut PyObject,
25    ) -> *mut PyObject;
26
27    #[cfg(not(Py_3_13))]
28    #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
29    #[cfg_attr(PyPy, link_name = "PyPyEval_CallObjectWithKeywords")]
30    pub fn PyEval_CallObjectWithKeywords(
31        func: *mut PyObject,
32        obj: *mut PyObject,
33        kwargs: *mut PyObject,
34    ) -> *mut PyObject;
35}
36
37#[cfg(not(Py_3_13))]
38#[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
39#[inline]
40pub unsafe fn PyEval_CallObject(func: *mut PyObject, arg: *mut PyObject) -> *mut PyObject {
41    #[allow(deprecated)]
42    PyEval_CallObjectWithKeywords(func, arg, std::ptr::null_mut())
43}
44
45extern "C" {
46    #[cfg(not(Py_3_13))]
47    #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
48    #[cfg_attr(PyPy, link_name = "PyPyEval_CallFunction")]
49    pub fn PyEval_CallFunction(obj: *mut PyObject, format: *const c_char, ...) -> *mut PyObject;
50    #[cfg(not(Py_3_13))]
51    #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))]
52    #[cfg_attr(PyPy, link_name = "PyPyEval_CallMethod")]
53    pub fn PyEval_CallMethod(
54        obj: *mut PyObject,
55        methodname: *const c_char,
56        format: *const c_char,
57        ...
58    ) -> *mut PyObject;
59    #[cfg_attr(PyPy, link_name = "PyPyEval_GetBuiltins")]
60    pub fn PyEval_GetBuiltins() -> *mut PyObject;
61    #[cfg_attr(PyPy, link_name = "PyPyEval_GetGlobals")]
62    pub fn PyEval_GetGlobals() -> *mut PyObject;
63    #[cfg_attr(PyPy, link_name = "PyPyEval_GetLocals")]
64    pub fn PyEval_GetLocals() -> *mut PyObject;
65    pub fn PyEval_GetFrame() -> *mut crate::PyFrameObject;
66    #[cfg_attr(PyPy, link_name = "PyPy_AddPendingCall")]
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    #[cfg_attr(PyPy, link_name = "PyPy_MakePendingCalls")]
72    pub fn Py_MakePendingCalls() -> c_int;
73    #[cfg_attr(PyPy, link_name = "PyPy_SetRecursionLimit")]
74    pub fn Py_SetRecursionLimit(arg1: c_int);
75    #[cfg_attr(PyPy, link_name = "PyPy_GetRecursionLimit")]
76    pub fn Py_GetRecursionLimit() -> c_int;
77    fn _Py_CheckRecursiveCall(_where: *mut c_char) -> c_int;
78}
79
80extern "C" {
81    #[cfg(Py_3_9)]
82    #[cfg_attr(PyPy, link_name = "PyPy_EnterRecursiveCall")]
83    pub fn Py_EnterRecursiveCall(arg1: *const c_char) -> c_int;
84    #[cfg(Py_3_9)]
85    #[cfg_attr(PyPy, link_name = "PyPy_LeaveRecursiveCall")]
86    pub fn Py_LeaveRecursiveCall();
87}
88
89extern "C" {
90    pub fn PyEval_GetFuncName(arg1: *mut PyObject) -> *const c_char;
91    pub fn PyEval_GetFuncDesc(arg1: *mut PyObject) -> *const c_char;
92    pub fn PyEval_GetCallStats(arg1: *mut PyObject) -> *mut PyObject;
93    pub fn PyEval_EvalFrame(arg1: *mut crate::PyFrameObject) -> *mut PyObject;
94    pub fn PyEval_EvalFrameEx(f: *mut crate::PyFrameObject, exc: c_int) -> *mut PyObject;
95    #[cfg_attr(PyPy, link_name = "PyPyEval_SaveThread")]
96    pub fn PyEval_SaveThread() -> *mut PyThreadState;
97    #[cfg_attr(PyPy, link_name = "PyPyEval_RestoreThread")]
98    pub fn PyEval_RestoreThread(arg1: *mut PyThreadState);
99}
100
101extern "C" {
102    #[cfg(not(Py_3_13))]
103    #[cfg_attr(PyPy, link_name = "PyPyEval_ThreadsInitialized")]
104    #[cfg_attr(
105        Py_3_9,
106        deprecated(
107            note = "Deprecated in Python 3.9, this function always returns true in Python 3.7 or newer."
108        )
109    )]
110    pub fn PyEval_ThreadsInitialized() -> c_int;
111    #[cfg_attr(PyPy, link_name = "PyPyEval_InitThreads")]
112    #[cfg_attr(
113        Py_3_9,
114        deprecated(
115            note = "Deprecated in Python 3.9, this function does nothing in Python 3.7 or newer."
116        )
117    )]
118    pub fn PyEval_InitThreads();
119    pub fn PyEval_AcquireLock();
120    pub fn PyEval_ReleaseLock();
121    #[cfg_attr(PyPy, link_name = "PyPyEval_AcquireThread")]
122    pub fn PyEval_AcquireThread(tstate: *mut PyThreadState);
123    #[cfg_attr(PyPy, link_name = "PyPyEval_ReleaseThread")]
124    pub fn PyEval_ReleaseThread(tstate: *mut PyThreadState);
125    #[cfg(not(Py_3_8))]
126    pub fn PyEval_ReInitThreads();
127}
128
129// skipped Py_BEGIN_ALLOW_THREADS
130// skipped Py_BLOCK_THREADS
131// skipped Py_UNBLOCK_THREADS
132// skipped Py_END_ALLOW_THREADS
133// skipped FVC_MASK
134// skipped FVC_NONE
135// skipped FVC_STR
136// skipped FVC_REPR
137// skipped FVC_ASCII
138// skipped FVS_MASK
139// skipped FVS_HAVE_SPEC