diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2002-12-23 22:33:49 +0000 |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2002-12-23 22:33:49 +0000 |
commit | 4f8071e6426c515bbf20a8ddb1da4ebfd87c3671 (patch) | |
tree | 29eeeb1b1514d277240f46d19a67092b8f2f69be /Tools/bgen | |
parent | bf77d0bbb2f5e427e7eea7121e291c003c5d3a4f (diff) | |
download | cpython-4f8071e6426c515bbf20a8ddb1da4ebfd87c3671.tar.gz |
Oops, old-style types don't have a tp_free slot. Call PyObject_Free
directly in that case.
Diffstat (limited to 'Tools/bgen')
-rw-r--r-- | Tools/bgen/bgen/bgenObjectDefinition.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Tools/bgen/bgen/bgenObjectDefinition.py b/Tools/bgen/bgen/bgenObjectDefinition.py index fd60d610ae..986b407768 100644 --- a/Tools/bgen/bgen/bgenObjectDefinition.py +++ b/Tools/bgen/bgen/bgenObjectDefinition.py @@ -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 */") |