summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-07-10 15:46:33 (GMT)
committerGuido van Rossum <guido@python.org>1998-07-10 15:46:33 (GMT)
commitd4ba73c75bd4a0f049d8fb45859ddee1a2393b4f (patch)
tree4fac52ea6cb7b7b4f2eeb60c4021a71e0da996b4 /Include
parent9223351617793f0674b8410d39ff5437b2a29879 (diff)
downloadcpython-d4ba73c75bd4a0f049d8fb45859ddee1a2393b4f.zip
cpython-d4ba73c75bd4a0f049d8fb45859ddee1a2393b4f.tar.gz
cpython-d4ba73c75bd4a0f049d8fb45859ddee1a2393b4f.tar.bz2
Move the definition of PyMethodObject to classobject.h, so it can define
macros for more efficient access to the fields.
Diffstat (limited to 'Include')
-rw-r--r--Include/classobject.h16
1 files changed, 16 insertions, 0 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