diff options
author | Guido van Rossum <guido@python.org> | 2001-09-05 22:52:50 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-09-05 22:52:50 (GMT) |
commit | b479dc561c1e778c892f04d1e9673400e95d7e78 (patch) | |
tree | f34c39cbecffdf0c0cda704a44c8758d6e097f1a | |
parent | a40c793d06ee2b42a5013015352616b4ca6b288b (diff) | |
download | cpython-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.h | 4 | ||||
-rw-r--r-- | Objects/classobject.c | 30 |
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) { |