]> granicus.if.org Git - python/commitdiff
Support type objects in isinstance().
authorGuido van Rossum <guido@python.org>
Tue, 2 Dec 1997 19:11:45 +0000 (19:11 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 2 Dec 1997 19:11:45 +0000 (19:11 +0000)
E.g. isinstance('',types.StringType) will return true now instead of
raising a TypeError exception.  This is for JPython compatibility.

Python/bltinmodule.c

index f2839acbbf3d9f00292fbd78d1c2a0f306a4a2f5..4019559d922a62015a3ad41095cfba4c8cb3f7bd 100644 (file)
@@ -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);
 }