Oops, old-style types don't have a tp_free slot. Call PyObject_Free
directly in that case.
diff --git a/Tools/bgen/bgen/bgenObjectDefinition.py b/Tools/bgen/bgen/bgenObjectDefinition.py
index fd60d61..986b407 100644
--- a/Tools/bgen/bgen/bgenObjectDefinition.py
+++ b/Tools/bgen/bgen/bgenObjectDefinition.py
@@ -136,8 +136,11 @@
 		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 @@
 		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 */")