Fix SF bug #486144: Uninitialized __slot__ vrbl is None.

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.
This commit is contained in:
Guido van Rossum 2001-12-04 17:13:22 +00:00
parent bb7775a6ae
commit 64b206c19e
1 changed files with 4 additions and 2 deletions

View 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 *);
}
}