]> granicus.if.org Git - python/commitdiff
Oops, old-style types don't have a tp_free slot. Call PyObject_Free
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 23 Dec 2002 22:33:49 +0000 (22:33 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 23 Dec 2002 22:33:49 +0000 (22:33 +0000)
directly in that case.

Tools/bgen/bgen/bgenObjectDefinition.py

index fd60d610aebff06dbfedde5130f7cba550dec789..986b407768bfbeee456f392020a4817b1b1f5bba 100644 (file)
@@ -136,8 +136,11 @@ class ObjectDefinition(GeneratorGroup):
                self.outputCleanupStructMembers()
                if self.basetype:
                        Output("%s.tp_dealloc(self)", self.basetype)
-               else:
+               elif hasattr(self, 'output_tp_free'):
+                       # This is a new-style object with tp_free slot
                        Output("self->ob_type->tp_free((PyObject *)self);")
+               else:
+                       Output("PyObject_Free((PyObject *)self);")
                OutRbrace()
 
        def outputCleanupStructMembers(self):
@@ -205,9 +208,10 @@ class ObjectDefinition(GeneratorGroup):
                Output("};")
                
        def outputTypeObjectInitializer(self):
-               Output("""%s.ob_type = &PyType_Type;""", self.typename);
+               Output("""%s.ob_type = &PyType_Type;""", self.typename)
                if self.basetype:
                        Output("%s.tp_base = %s;", self.typename, self.basetype)
+               Output("if (PyType_Ready(&%s) < 0) return;", self.typename)
                Output("""Py_INCREF(&%s);""", self.typename)
                Output("PyModule_AddObject(m, \"%s\", (PyObject *)&%s);", self.name, self.typename);
                Output("/* Backward-compatible name */")