diff options
Diffstat (limited to 'Modules/newmodule.c')
-rw-r--r-- | Modules/newmodule.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Modules/newmodule.c b/Modules/newmodule.c index cfe7883..52328a9 100644 --- a/Modules/newmodule.c +++ b/Modules/newmodule.c @@ -71,11 +71,23 @@ new_instancemethod(unused, args) PyObject* self; PyObject* classObj; - if (!PyArg_ParseTuple(args, "O!O!O!", - &PyFunction_Type, &func, - &PyInstance_Type, &self, + if (!PyArg_ParseTuple(args, "OOO!", + &func, + &self, &PyClass_Type, &classObj)) return NULL; + if (!PyCallable_Check(func)) { + PyErr_SetString(PyExc_TypeError, + "first argument must be callable"); + return NULL; + } + if (self == Py_None) + self = NULL; + else if (!PyInstance_Check(self)) { + PyErr_SetString(PyExc_TypeError, + "second argument must be instance or None"); + return NULL; + } return PyMethod_New(func, self, classObj); } |