Skip to content

Commit

Permalink
- PyType_Ready(): Initialize the ob_type field to &PyType_Type if it's
Browse files Browse the repository at this point in the history
  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.
  • Loading branch information
gvanrossum committed Dec 17, 2001
1 parent facf24b commit f884b74
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1747,6 +1747,16 @@ inherit_special(PyTypeObject *type, PyTypeObject *base)
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)
Expand Down Expand Up @@ -1940,6 +1950,12 @@ PyType_Ready(PyTypeObject *type)

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)
Expand Down

0 comments on commit f884b74

Please sign in to comment.