From f5dd914196dc4c55394832b3de62fb621b4482e2 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 2 Dec 1997 19:11:45 +0000 Subject: Support type objects in isinstance(). E.g. isinstance('',types.StringType) will return true now instead of raising a TypeError exception. This is for JPython compatibility. --- Python/bltinmodule.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index f2839ac..4019559 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1627,18 +1627,23 @@ builtin_isinstance(self, args) if (!PyArg_ParseTuple(args, "OO", &inst, &cls)) return NULL; - if (!PyClass_Check(cls)) { - PyErr_SetString(PyExc_TypeError, - "second argument must be a class"); - return NULL; + if (PyType_Check(cls)) { + retval = (inst->ob_type == cls); } - - if (!PyInstance_Check(inst)) - retval = 0; else { - PyObject *inclass = - (PyObject*)((PyInstanceObject*)inst)->in_class; - retval = PyClass_IsSubclass(inclass, cls); + if (!PyClass_Check(cls)) { + PyErr_SetString(PyExc_TypeError, + "second argument must be a class"); + return NULL; + } + + if (!PyInstance_Check(inst)) + retval = 0; + else { + PyObject *inclass = + (PyObject*)((PyInstanceObject*)inst)->in_class; + retval = PyClass_IsSubclass(inclass, cls); + } } return PyInt_FromLong(retval); } -- cgit v0.12