summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-09-05 22:52:50 (GMT)
committerGuido van Rossum <guido@python.org>2001-09-05 22:52:50 (GMT)
commitb479dc561c1e778c892f04d1e9673400e95d7e78 (patch)
treef34c39cbecffdf0c0cda704a44c8758d6e097f1a
parenta40c793d06ee2b42a5013015352616b4ca6b288b (diff)
downloadcpython-b479dc561c1e778c892f04d1e9673400e95d7e78.zip
cpython-b479dc561c1e778c892f04d1e9673400e95d7e78.tar.gz
cpython-b479dc561c1e778c892f04d1e9673400e95d7e78.tar.bz2
Add PyMethod_Function(), PyMethod_Self(), PyMethod_Class() back.
While not even documented, they were clearly part of the C API, there's no great difficulty to support them, and it has the cool effect of not requiring any changes to ExtensionClass.c.
-rw-r--r--Include/classobject.h4
-rw-r--r--Objects/classobject.c30
2 files changed, 34 insertions, 0 deletions
diff --git a/Include/classobject.h b/Include/classobject.h
index 3bd535e..3b25c74 100644
--- a/Include/classobject.h
+++ b/Include/classobject.h
@@ -47,6 +47,10 @@ extern DL_IMPORT(PyObject *) PyInstance_New(PyObject *, PyObject *,
extern DL_IMPORT(PyObject *) PyInstance_NewRaw(PyObject *, PyObject *);
extern DL_IMPORT(PyObject *) PyMethod_New(PyObject *, PyObject *, PyObject *);
+extern DL_IMPORT(PyObject *) PyMethod_Function(PyObject *);
+extern DL_IMPORT(PyObject *) PyMethod_Self(PyObject *);
+extern DL_IMPORT(PyObject *) PyMethod_Class(PyObject *);
+
/* Macros for direct access to these values. Type checks are *not*
done, so use with care. */
#define PyMethod_GET_FUNCTION(meth) \
diff --git a/Objects/classobject.c b/Objects/classobject.c
index dd2a40b..a38f354 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -106,6 +106,36 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
return (PyObject *) op;
}
+PyObject *
+PyMethod_Function(PyObject *im)
+{
+ if (!PyMethod_Check(im)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return ((PyMethodObject *)im)->im_func;
+}
+
+PyObject *
+PyMethod_Self(PyObject *im)
+{
+ if (!PyMethod_Check(im)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return ((PyMethodObject *)im)->im_self;
+}
+
+PyObject *
+PyMethod_Class(PyObject *im)
+{
+ if (!PyMethod_Check(im)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return ((PyMethodObject *)im)->im_class;
+}
+
static PyObject *
class_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{