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.
This commit is contained in:
Guido van Rossum 1997-12-02 19:11:45 +00:00
parent 6cedf82ac1
commit f5dd914196
1 changed files with 15 additions and 10 deletions

View File

@ -1627,18 +1627,23 @@ builtin_isinstance(self, args)
if (!PyArg_ParseTuple(args, "OO", &inst, &cls)) if (!PyArg_ParseTuple(args, "OO", &inst, &cls))
return NULL; return NULL;
if (!PyClass_Check(cls)) { if (PyType_Check(cls)) {
PyErr_SetString(PyExc_TypeError, retval = (inst->ob_type == cls);
"second argument must be a class");
return NULL;
} }
if (!PyInstance_Check(inst))
retval = 0;
else { else {
PyObject *inclass = if (!PyClass_Check(cls)) {
(PyObject*)((PyInstanceObject*)inst)->in_class; PyErr_SetString(PyExc_TypeError,
retval = PyClass_IsSubclass(inclass, cls); "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); return PyInt_FromLong(retval);
} }