]> granicus.if.org Git - python/commit
Variation of patch # 1624059 to speed up checking if an object is a subclass
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 25 Feb 2007 19:44:48 +0000 (19:44 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 25 Feb 2007 19:44:48 +0000 (19:44 +0000)
commitee3a1b5244e60566c5d5c8f6a1ea4b381de99f1c
treead52a17fc77530870a575107a7cea9c27de17606
parent5a3e812444609329b30be837a08c11269d917b72
Variation of patch # 1624059 to speed up checking if an object is a subclass
of some of the common builtin types.

Use a bit in tp_flags for each common builtin type.  Check the bit
to determine if any instance is a subclass of these common types.
The check avoids a function call and O(n) search of the base classes.
The check is done in the various Py*_Check macros rather than calling
PyType_IsSubtype().

All the bits are set in tp_flags when the type is declared
in the Objects/*object.c files because PyType_Ready() is not called
for all the types.  Should PyType_Ready() be called for all types?
If so and the change is made, the changes to the Objects/*object.c files
can be reverted (remove setting the tp_flags).  Objects/typeobject.c
would also have to be modified to add conditions
for Py*_CheckExact() in addition to each the PyType_IsSubtype check.
18 files changed:
Include/dictobject.h
Include/intobject.h
Include/listobject.h
Include/longobject.h
Include/object.h
Include/pyerrors.h
Include/stringobject.h
Include/tupleobject.h
Include/unicodeobject.h
Objects/dictobject.c
Objects/exceptions.c
Objects/intobject.c
Objects/listobject.c
Objects/longobject.c
Objects/stringobject.c
Objects/tupleobject.c
Objects/typeobject.c
Objects/unicodeobject.c