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_14)]
45 pub func_annotate: *mut PyObject,
46 #[cfg(Py_3_12)]
47 pub func_typeparams: *mut PyObject,
48 pub vectorcall: Option<crate::vectorcallfunc>,
49 #[cfg(Py_3_11)]
50 pub func_version: u32,
51}
52
53#[cfg(PyPy)]
54#[repr(C)]
55pub struct PyFunctionObject {
56 pub ob_base: PyObject,
57 pub func_name: *mut PyObject,
58}
59
60#[cfg(GraalPy)]
61pub struct PyFunctionObject {
62 pub ob_base: PyObject,
63}
64
65#[cfg_attr(windows, link(name = "pythonXY"))]
66extern "C" {
67 #[cfg(not(all(PyPy, not(Py_3_8))))]
68 #[cfg_attr(PyPy, link_name = "PyPyFunction_Type")]
69 pub static mut PyFunction_Type: crate::PyTypeObject;
70}
71
72#[cfg(not(all(PyPy, not(Py_3_8))))]
73#[inline]
74pub unsafe fn PyFunction_Check(op: *mut PyObject) -> c_int {
75 (crate::Py_TYPE(op) == addr_of_mut!(PyFunction_Type)) as c_int
76}
77
78extern "C" {
79 pub fn PyFunction_New(code: *mut PyObject, globals: *mut PyObject) -> *mut PyObject;
80 pub fn PyFunction_NewWithQualName(
81 code: *mut PyObject,
82 globals: *mut PyObject,
83 qualname: *mut PyObject,
84 ) -> *mut PyObject;
85 pub fn PyFunction_GetCode(op: *mut PyObject) -> *mut PyObject;
86 pub fn PyFunction_GetGlobals(op: *mut PyObject) -> *mut PyObject;
87 pub fn PyFunction_GetModule(op: *mut PyObject) -> *mut PyObject;
88 pub fn PyFunction_GetDefaults(op: *mut PyObject) -> *mut PyObject;
89 pub fn PyFunction_SetDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
90 pub fn PyFunction_GetKwDefaults(op: *mut PyObject) -> *mut PyObject;
91 pub fn PyFunction_SetKwDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
92 pub fn PyFunction_GetClosure(op: *mut PyObject) -> *mut PyObject;
93 pub fn PyFunction_SetClosure(op: *mut PyObject, closure: *mut PyObject) -> c_int;
94 pub fn PyFunction_GetAnnotations(op: *mut PyObject) -> *mut PyObject;
95 pub fn PyFunction_SetAnnotations(op: *mut PyObject, annotations: *mut PyObject) -> c_int;
96}
97
98