diff options
-rw-r--r-- | Include/classobject.h | 16 | ||||
-rw-r--r-- | Objects/classobject.c | 8 |
2 files changed, 16 insertions, 8 deletions
diff --git a/Include/classobject.h b/Include/classobject.h index a93abb6..e03f468 100644 --- a/Include/classobject.h +++ b/Include/classobject.h @@ -56,6 +56,13 @@ typedef struct { PyObject *in_dict; /* A dictionary */ } PyInstanceObject; +typedef struct { + PyObject_HEAD + PyObject *im_func; /* The callable object implementing the method */ + PyObject *im_self; /* The instance it is bound to, or NULL */ + PyObject *im_class; /* The class that defined the method */ +} PyMethodObject; + extern DL_IMPORT(PyTypeObject) PyClass_Type, PyInstance_Type, PyMethod_Type; #define PyClass_Check(op) ((op)->ob_type == &PyClass_Type) @@ -70,6 +77,15 @@ extern PyObject *PyMethod_Function Py_PROTO((PyObject *)); extern PyObject *PyMethod_Self Py_PROTO((PyObject *)); extern PyObject *PyMethod_Class Py_PROTO((PyObject *)); +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyMethod_GET_FUNCTION(meth) \ + (((PyMethodObject *)meth) -> im_func) +#define PyMethod_GET_SELF(meth) \ + (((PyMethodObject *)meth) -> im_self) +#define PyMethod_GET_CLASS(meth) \ + (((PyMethodObject *)meth) -> im_class) + extern int PyClass_IsSubclass Py_PROTO((PyObject *, PyObject *)); extern PyObject *PyInstance_DoBinOp diff --git a/Objects/classobject.c b/Objects/classobject.c index 86fc1d3..299ea64 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -1411,14 +1411,6 @@ PyTypeObject PyInstance_Type = { In case (b), im_self is NULL */ -typedef struct { - PyObject_HEAD - PyObject *im_func; /* The function implementing the method */ - PyObject *im_self; /* The instance it is bound to, or NULL */ - PyObject *im_class; /* The class that defined the method */ -} PyMethodObject; - - static PyMethodObject *free_list; PyObject * |