- PyType_Ready(): Initialize the ob_type field to &PyType_Type if it's
  NULL, so that you can call PyType_Ready() to initialize a type that
  is to be separately compiled with C on Windows.

inherit_special():  Add a long comment explaining that you have to set
tp_new if your base class is PyBaseObject_Type.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index ba30063..b8a33c8 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1747,6 +1747,16 @@
 			type->tp_clear = base->tp_clear;
 	}
 	if (type->tp_flags & base->tp_flags & Py_TPFLAGS_HAVE_CLASS) {
+		/* The condition below could use some explanation.
+		   It appears that tp_new is not inherited for static types
+		   whose base class is 'object'; this seems to be a precaution
+		   so that old extension types don't suddenly become
+		   callable (object.__new__ wouldn't insure the invariants
+		   that the extension type's own factory function ensures).
+		   Heap types, of course, are under our control, so they do
+		   inherit tp_new; static extension types that specify some
+		   other built-in type as the default are considered
+		   new-style-aware so they also inherit object.__new__. */
 		if (base != &PyBaseObject_Type ||
 		    (type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
 			if (type->tp_new == NULL)
@@ -1940,6 +1950,12 @@
 
 	type->tp_flags |= Py_TPFLAGS_READYING;
 
+	/* Initialize ob_type if NULL.  This means extensions that want to be
+	   compilable separately on Windows can call PyType_Ready() instead of
+	   initializing the ob_type field of their type objects. */
+	if (type->ob_type == NULL)
+		type->ob_type = &PyType_Type;
+
 	/* Initialize tp_base (defaults to BaseObject unless that's us) */
 	base = type->tp_base;
 	if (base == NULL && type != &PyBaseObject_Type)