pyo3_ffi/cpython/
funcobject.rs1use std::os::raw::c_int;
2#[cfg(not(all(PyPy, not(Py_3_8))))]
3use std::ptr::addr_of_mut;
4
5use crate::PyObject;
6
7#[cfg(all(not(any(PyPy, GraalPy)), not(Py_3_10)))]
8#[repr(C)]
9pub struct PyFunctionObject {
10 pub ob_base: PyObject,
11 pub func_code: *mut PyObject,
12 pub func_globals: *mut PyObject,
13 pub func_defaults: *mut PyObject,
14 pub func_kwdefaults: *mut PyObject,
15 pub func_closure: *mut PyObject,
16 pub func_doc: *mut PyObject,
17 pub func_name: *mut PyObject,
18 pub func_dict: *mut PyObject,
19 pub func_weakreflist: *mut PyObject,
20 pub func_module: *mut PyObject,
21 pub func_annotations: *mut PyObject,
22 pub func_qualname: *mut PyObject,
23 #[cfg(Py_3_8)]
24 pub vectorcall: Option<crate::vectorcallfunc>,
25}
26
27#[cfg(all(not(any(PyPy, GraalPy)), Py_3_10))]
28#[repr(C)]
29pub struct PyFunctionObject {
30 pub ob_base: PyObject,
31 pub func_globals: *mut PyObject,
32 pub func_builtins: *mut PyObject,
33 pub func_name: *mut PyObject,
34 pub func_qualname: *mut PyObject,
35 pub func_code: *mut PyObject,
36 pub func_defaults: *mut PyObject,
37 pub func_kwdefaults: *mut PyObject,
38 pub func_closure: *mut PyObject,
39 pub func_doc: *mut PyObject,
40 pub func_dict: *mut PyObject,
41 pub func_weakreflist: *mut PyObject,
42 pub func_module: *mut PyObject,
43 pub func_annotations: *mut PyObject,
44 #[cfg(Py_3_12)]
45 pub func_typeparams: *mut PyObject,
46 pub vectorcall: Option<crate::vectorcallfunc>,
47 #[cfg(Py_3_11)]
48 pub func_version: u32,
49}
50
51#[cfg(PyPy)]
52#[repr(C)]
53pub struct PyFunctionObject {
54 pub ob_base: PyObject,
55 pub func_name: *mut PyObject,
56}
57
58#[cfg(GraalPy)]
59pub struct PyFunctionObject {
60 pub ob_base: PyObject,
61}
62
63#[cfg_attr(windows, link(name = "pythonXY"))]
64extern "C" {
65 #[cfg(not(all(PyPy, not(Py_3_8))))]
66 #[cfg_attr(PyPy, link_name = "PyPyFunction_Type")]
67 pub static mut PyFunction_Type: crate::PyTypeObject;
68}
69
70#[cfg(not(all(PyPy, not(Py_3_8))))]
71#[inline]
72pub unsafe fn PyFunction_Check(op: *mut PyObject) -> c_int {
73 (crate::Py_TYPE(op) == addr_of_mut!(PyFunction_Type)) as c_int
74}
75
76extern "C" {
77 pub fn PyFunction_New(code: *mut PyObject, globals: *mut PyObject) -> *mut PyObject;
78 pub fn PyFunction_NewWithQualName(
79 code: *mut PyObject,
80 globals: *mut PyObject,
81 qualname: *mut PyObject,
82 ) -> *mut PyObject;
83 pub fn PyFunction_GetCode(op: *mut PyObject) -> *mut PyObject;
84 pub fn PyFunction_GetGlobals(op: *mut PyObject) -> *mut PyObject;
85 pub fn PyFunction_GetModule(op: *mut PyObject) -> *mut PyObject;
86 pub fn PyFunction_GetDefaults(op: *mut PyObject) -> *mut PyObject;
87 pub fn PyFunction_SetDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
88 pub fn PyFunction_GetKwDefaults(op: *mut PyObject) -> *mut PyObject;
89 pub fn PyFunction_SetKwDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
90 pub fn PyFunction_GetClosure(op: *mut PyObject) -> *mut PyObject;
91 pub fn PyFunction_SetClosure(op: *mut PyObject, closure: *mut PyObject) -> c_int;
92 pub fn PyFunction_GetAnnotations(op: *mut PyObject) -> *mut PyObject;
93 pub fn PyFunction_SetAnnotations(op: *mut PyObject, annotations: *mut PyObject) -> c_int;
94}
95
96