1 /* Former class object interface -- now only bound methods are here  */
2 
3 /* Revealing some structures (not for general use) */
4 
5 #ifndef Py_LIMITED_API
6 #ifndef Py_CLASSOBJECT_H
7 #define Py_CLASSOBJECT_H
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 typedef struct {
13     PyObject_HEAD
14     PyObject *im_func;   /* The callable object implementing the method */
15     PyObject *im_self;   /* The instance it is bound to */
16     PyObject *im_weakreflist; /* List of weak references */
17 } PyMethodObject;
18 
19 PyAPI_DATA(PyTypeObject) PyMethod_Type;
20 
21 #define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
22 
23 PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
24 
25 PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
26 PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
27 
28 /* Macros for direct access to these values. Type checks are *not*
29    done, so use with care. */
30 #define PyMethod_GET_FUNCTION(meth) \
31         (((PyMethodObject *)meth) -> im_func)
32 #define PyMethod_GET_SELF(meth) \
33         (((PyMethodObject *)meth) -> im_self)
34 
35 PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
36 
37 typedef struct {
38     PyObject_HEAD
39     PyObject *func;
40 } PyInstanceMethodObject;
41 
42 PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
43 
44 #define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)
45 
46 PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
47 PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
48 
49 /* Macros for direct access to these values. Type checks are *not*
50    done, so use with care. */
51 #define PyInstanceMethod_GET_FUNCTION(meth) \
52         (((PyInstanceMethodObject *)meth) -> func)
53 
54 #ifdef __cplusplus
55 }
56 #endif
57 #endif /* !Py_CLASSOBJECT_H */
58 #endif /* Py_LIMITED_API */
59