Skip to main content

pyforge_ffi/cpython/
funcobject.rs

1use crate::PyObject;
2use std::ffi::c_int;
3
4#[cfg(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(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
49extern_libpython! {
50    pub static mut PyFunction_Type: crate::PyTypeObject;
51}
52
53#[inline]
54pub unsafe fn PyFunction_Check(op: *mut PyObject) -> c_int {
55    (crate::Py_TYPE(op) == &raw mut PyFunction_Type) as c_int
56}
57
58extern_libpython! {
59    pub fn PyFunction_New(code: *mut PyObject, globals: *mut PyObject) -> *mut PyObject;
60    pub fn PyFunction_NewWithQualName(
61        code: *mut PyObject,
62        globals: *mut PyObject,
63        qualname: *mut PyObject,
64    ) -> *mut PyObject;
65    pub fn PyFunction_GetCode(op: *mut PyObject) -> *mut PyObject;
66    pub fn PyFunction_GetGlobals(op: *mut PyObject) -> *mut PyObject;
67    pub fn PyFunction_GetModule(op: *mut PyObject) -> *mut PyObject;
68    pub fn PyFunction_GetDefaults(op: *mut PyObject) -> *mut PyObject;
69    pub fn PyFunction_SetDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
70    pub fn PyFunction_GetKwDefaults(op: *mut PyObject) -> *mut PyObject;
71    pub fn PyFunction_SetKwDefaults(op: *mut PyObject, defaults: *mut PyObject) -> c_int;
72    pub fn PyFunction_GetClosure(op: *mut PyObject) -> *mut PyObject;
73    pub fn PyFunction_SetClosure(op: *mut PyObject, closure: *mut PyObject) -> c_int;
74    pub fn PyFunction_GetAnnotations(op: *mut PyObject) -> *mut PyObject;
75    pub fn PyFunction_SetAnnotations(op: *mut PyObject, annotations: *mut PyObject) -> c_int;
76}
77
78// skipped _PyFunction_Vectorcall
79// skipped PyFunction_GET_CODE
80// skipped PyFunction_GET_GLOBALS
81// skipped PyFunction_GET_MODULE
82// skipped PyFunction_GET_DEFAULTS
83// skipped PyFunction_GET_KW_DEFAULTS
84// skipped PyFunction_GET_CLOSURE
85// skipped PyFunction_GET_ANNOTATIONS
86
87// skipped PyClassMethod_Type
88// skipped PyStaticMethod_Type
89// skipped PyClassMethod_New
90// skipped PyStaticMethod_New