python27_sys/
classobject.rs

1use libc::c_int;
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[repr(C)]
7#[derive(Copy, Clone)]
8pub struct PyClassObject {
9    #[cfg(py_sys_config = "Py_TRACE_REFS")]
10    pub _ob_next: *mut PyObject,
11    #[cfg(py_sys_config = "Py_TRACE_REFS")]
12    pub _ob_prev: *mut PyObject,
13    pub ob_refcnt: Py_ssize_t,
14    pub ob_type: *mut PyTypeObject,
15    pub cl_bases: *mut PyObject,
16    pub cl_dict: *mut PyObject,
17    pub cl_name: *mut PyObject,
18    pub cl_getattr: *mut PyObject,
19    pub cl_setattr: *mut PyObject,
20    pub cl_delattr: *mut PyObject,
21    pub cl_weakreflist: *mut PyObject,
22}
23
24#[repr(C)]
25#[derive(Copy, Clone)]
26pub struct PyInstanceObject {
27    #[cfg(py_sys_config = "Py_TRACE_REFS")]
28    pub _ob_next: *mut PyObject,
29    #[cfg(py_sys_config = "Py_TRACE_REFS")]
30    pub _ob_prev: *mut PyObject,
31    pub ob_refcnt: Py_ssize_t,
32    pub ob_type: *mut PyTypeObject,
33    pub in_class: *mut PyClassObject,
34    pub in_dict: *mut PyObject,
35    pub in_weakreflist: *mut PyObject,
36}
37
38#[repr(C)]
39#[derive(Copy, Clone)]
40pub struct PyMethodObject {
41    #[cfg(py_sys_config = "Py_TRACE_REFS")]
42    pub _ob_next: *mut PyObject,
43    #[cfg(py_sys_config = "Py_TRACE_REFS")]
44    pub _ob_prev: *mut PyObject,
45    pub ob_refcnt: Py_ssize_t,
46    pub ob_type: *mut PyTypeObject,
47    pub im_func: *mut PyObject,
48    pub im_self: *mut PyObject,
49    pub im_class: *mut PyObject,
50    pub im_weakreflist: *mut PyObject,
51}
52
53#[cfg_attr(windows, link(name = "pythonXY"))]
54extern "C" {
55    pub static mut PyClass_Type: PyTypeObject;
56    pub static mut PyInstance_Type: PyTypeObject;
57    pub static mut PyMethod_Type: PyTypeObject;
58}
59
60#[inline(always)]
61pub unsafe fn PyClass_Check(op: *mut PyObject) -> c_int {
62    let u: *mut PyTypeObject = &mut PyClass_Type;
63    (Py_TYPE(op) == u) as c_int
64}
65
66#[inline(always)]
67pub unsafe fn PyInstance_Check(op: *mut PyObject) -> c_int {
68    let u: *mut PyTypeObject = &mut PyInstance_Type;
69    (Py_TYPE(op) == u) as c_int
70}
71
72#[inline(always)]
73pub unsafe fn PyMethod_Check(op: *mut PyObject) -> c_int {
74    let u: *mut PyTypeObject = &mut PyMethod_Type;
75    (Py_TYPE(op) == u) as c_int
76}
77
78#[cfg_attr(windows, link(name = "pythonXY"))]
79extern "C" {
80    pub fn PyClass_New(
81        arg1: *mut PyObject,
82        arg2: *mut PyObject,
83        arg3: *mut PyObject,
84    ) -> *mut PyObject;
85    pub fn PyInstance_New(
86        arg1: *mut PyObject,
87        arg2: *mut PyObject,
88        arg3: *mut PyObject,
89    ) -> *mut PyObject;
90    pub fn PyInstance_NewRaw(arg1: *mut PyObject, arg2: *mut PyObject) -> *mut PyObject;
91    pub fn PyMethod_New(
92        arg1: *mut PyObject,
93        arg2: *mut PyObject,
94        arg3: *mut PyObject,
95    ) -> *mut PyObject;
96    pub fn PyMethod_Function(arg1: *mut PyObject) -> *mut PyObject;
97    pub fn PyMethod_Self(arg1: *mut PyObject) -> *mut PyObject;
98    pub fn PyMethod_Class(arg1: *mut PyObject) -> *mut PyObject;
99    fn _PyInstance_Lookup(pinst: *mut PyObject, name: *mut PyObject) -> *mut PyObject;
100    pub fn PyClass_IsSubclass(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
101    pub fn PyMethod_ClearFreeList() -> c_int;
102}
103
104#[inline(always)]
105pub unsafe fn PyMethod_GET_FUNCTION(meth: *mut PyObject) -> *mut PyObject {
106    (*(meth as *mut PyMethodObject)).im_func
107}
108
109#[inline(always)]
110pub unsafe fn PyMethod_GET_SELF(meth: *mut PyObject) -> *mut PyObject {
111    (*(meth as *mut PyMethodObject)).im_self
112}
113
114#[inline(always)]
115pub unsafe fn PyMethod_GET_CLASS(meth: *mut PyObject) -> *mut PyObject {
116    (*(meth as *mut PyMethodObject)).im_class
117}