• Tim Peters's avatar
    object.h special-build macro minefield: renamed all the new lexical · 3459251d
    Tim Peters yazdı
    helper macros to something saner, and used them appropriately in other
    files too, to reduce #ifdef blocks.
    
    classobject.c, instance_dealloc():  One of my worst Python Memories is
    trying to fix this routine a few years ago when COUNT_ALLOCS was defined
    but Py_TRACE_REFS wasn't.  The special-build code here is way too
    complicated.  Now it's much simpler.  Difference:  in a Py_TRACE_REFS
    build, the instance is no longer in the doubly-linked list of live
    objects while its __del__ method is executing, and that may be visible
    via sys.getobjects() called from a __del__ method.  Tough -- the object
    is presumed dead while its __del__ is executing anyway, and not calling
    _Py_NewReference() at the start allows enormous code simplification.
    
    typeobject.c, call_finalizer():  The special-build instance_dealloc()
    pain apparently spread to here too via cut-'n-paste, and this is much
    simpler now too.  In addition, I didn't understand why this routine
    was calling _PyObject_GC_TRACK() after a resurrection, since there's no
    plausible way _PyObject_GC_UNTRACK() could have been called on the
    object by this point.  I suspect it was left over from pasting the
    instance_delloc() code.  Instead asserted that the object is still
    tracked.  Caution:  I suspect we don't have a test that actually
    exercises the subtype_dealloc() __del__-resurrected-me code.
    3459251d
object.h 27.2 KB