2009/8/16 Joshua Haberman <joshua at reverberate.org>: > On Sun, Aug 16, 2009 at 3:37 PM, "Martin v. Löwis"<martin at v.loewis.de> wrote: >>> So where does the Py_DECREF() for the above Py_INCREF() live? I >>> expected to find this code snippet somewhere, but couldn't: >>> >>> if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) >>> Py_DECREF(type); >> >> For a regular heaptype, it's in subtype_dealloc: >> >> /* Can't reference self beyond this point */ >> Py_DECREF(type); > > Thanks for the pointer. I noticed that subtype_dealloc is only called for types > that are allocated using type_new(). Does this mean that it is not > safe to create > types in C using just PyType_Ready() and set Py_TPFLAGS_HEAPTYPE on > them? The documentation is not clear on this point. > > Here is what I would like to do when I create my types dynamically: > > - implement tp_alloc and tp_dealloc() to INCREF and DECREF the type. > - not set Py_TPFLAGS_HEAPTYPE. > - set Py_TPFLAGS_HAVE_GC (because instances of my obj can create cycles) [Note that this is really starting to get off topic for python-dev.] Why do you need to set Py_TPFLAGS_HEAPTYPE on your C type? Is a normal static type not sufficient? The easiest way to create heaptypes is to simply call PyType_Type. -- Regards, Benjamin
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4