cleanup basicsize logic #3268

This commit is contained in:
Benjamin Peterson 2010-07-05 15:01:22 +00:00
parent 335d2c757d
commit a7465e2fdf
1 changed files with 2 additions and 4 deletions

View File

@ -3476,11 +3476,8 @@ add_getset(PyTypeObject *type, PyGetSetDef *gsp)
static void static void
inherit_special(PyTypeObject *type, PyTypeObject *base) inherit_special(PyTypeObject *type, PyTypeObject *base)
{ {
Py_ssize_t oldsize, newsize;
/* Copying basicsize is connected to the GC flags */ /* Copying basicsize is connected to the GC flags */
oldsize = base->tp_basicsize;
newsize = type->tp_basicsize ? type->tp_basicsize : oldsize;
if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC) && if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC) &&
(base->tp_flags & Py_TPFLAGS_HAVE_GC) && (base->tp_flags & Py_TPFLAGS_HAVE_GC) &&
(!type->tp_traverse && !type->tp_clear)) { (!type->tp_traverse && !type->tp_clear)) {
@ -3507,7 +3504,8 @@ inherit_special(PyTypeObject *type, PyTypeObject *base)
type->tp_new = base->tp_new; type->tp_new = base->tp_new;
} }
} }
type->tp_basicsize = newsize; if (type->tp_basicsize == 0)
type->tp_basicsize = base->tp_basicsize;
/* Copy other non-function slots */ /* Copy other non-function slots */