mirror of
https://github.com/python/cpython
synced 2026-09-28 13:28:16 +03:00
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. |
||
|---|---|---|
| .. | ||
| abstract.h | ||
| bitset.h | ||
| boolobject.h | ||
| bufferobject.h | ||
| cellobject.h | ||
| ceval.h | ||
| classobject.h | ||
| cobject.h | ||
| codecs.h | ||
| compile.h | ||
| complexobject.h | ||
| cStringIO.h | ||
| descrobject.h | ||
| dictobject.h | ||
| enumobject.h | ||
| errcode.h | ||
| eval.h | ||
| fileobject.h | ||
| floatobject.h | ||
| frameobject.h | ||
| funcobject.h | ||
| graminit.h | ||
| grammar.h | ||
| import.h | ||
| intobject.h | ||
| intrcheck.h | ||
| iterobject.h | ||
| listobject.h | ||
| longintrepr.h | ||
| longobject.h | ||
| marshal.h | ||
| metagrammar.h | ||
| methodobject.h | ||
| modsupport.h | ||
| moduleobject.h | ||
| node.h | ||
| object.h | ||
| objimpl.h | ||
| opcode.h | ||
| osdefs.h | ||
| parsetok.h | ||
| patchlevel.h | ||
| pgenheaders.h | ||
| py_curses.h | ||
| pydebug.h | ||
| pyerrors.h | ||
| pyfpe.h | ||
| pygetopt.h | ||
| pymactoolbox.h | ||
| pymem.h | ||
| pyport.h | ||
| pystate.h | ||
| Python.h | ||
| pythonrun.h | ||
| pythread.h | ||
| rangeobject.h | ||
| sliceobject.h | ||
| stringobject.h | ||
| structmember.h | ||
| structseq.h | ||
| symtable.h | ||
| sysmodule.h | ||
| token.h | ||
| traceback.h | ||
| tupleobject.h | ||
| ucnhash.h | ||
| unicodeobject.h | ||
| weakrefobject.h | ||