]> granicus.if.org Git - python/commitdiff
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
authorGuido van Rossum <guido@python.org>
Tue, 4 Dec 2001 17:13:22 +0000 (17:13 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 4 Dec 2001 17:13:22 +0000 (17:13 +0000)
There's now a new structmember code, T_OBJECT_EX, which is used for
all __slot__ variables (except __weakref__, which has special behavior
anyway).  This new code raises AttributeError when the variable is
NULL rather than converting NULL to None.

Objects/typeobject.c

index 6fc5d027bc0bd86fb2ff057c955ea3ec33f1fef5..16591cf77f8eedac6d70a0db8cd495ec5c06ec88 100644 (file)
@@ -1059,11 +1059,13 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
                for (i = 0; i < nslots; i++, mp++) {
                        mp->name = PyString_AS_STRING(
                                PyTuple_GET_ITEM(slots, i));
-                       mp->type = T_OBJECT;
+                       mp->type = T_OBJECT_EX;
                        mp->offset = slotoffset;
                        if (base->tp_weaklistoffset == 0 &&
-                           strcmp(mp->name, "__weakref__") == 0)
+                           strcmp(mp->name, "__weakref__") == 0) {
+                               mp->type = T_OBJECT;
                                type->tp_weaklistoffset = slotoffset;
+                       }
                        slotoffset += sizeof(PyObject *);
                }
        }