mirror of https://github.com/python/cpython
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:
parent
6cedf82ac1
commit
f5dd914196
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue