python27_sys/
classobject.rs1use 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}