]> granicus.if.org Git - python/commitdiff
The object returned by tp_new() may not have a tp_init.
authorJeremy Hylton <jeremy@alum.mit.edu>
Tue, 16 Jul 2002 19:39:38 +0000 (19:39 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Tue, 16 Jul 2002 19:39:38 +0000 (19:39 +0000)
If the object is an ExtensionClass, for example, the slot is not even
defined.  So we must check that the type has the slot (implied by
HAVE_CLASS) before calling tp_init().

Objects/typeobject.c

index a7263d8e7723f8f0582d1271d043babe6c61e1a5..31a7c3d2616cd4e53a78054c0dae9e438d3fd6e9 100644 (file)
@@ -199,7 +199,8 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
                if (!PyType_IsSubtype(obj->ob_type, type))
                        return obj;
                type = obj->ob_type;
-               if (type->tp_init != NULL &&
+               if (PyType_HasFeature(type, Py_TPFLAGS_HAVE_CLASS) &&
+                   type->tp_init != NULL &&
                    type->tp_init(obj, args, kwds) < 0) {
                        Py_DECREF(obj);
                        obj = NULL;