Skip to main content

pyo3_ffi/cpython/
funcobject.rs

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