From d4ba73c75bd4a0f049d8fb45859ddee1a2393b4f Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 10 Jul 1998 15:46:33 +0000 Subject: Move the definition of PyMethodObject to classobject.h, so it can define macros for more efficient access to the fields. --- Include/classobject.h | 16 ++++++++++++++++ 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 * -- cgit v0.12