summaryrefslogtreecommitdiffstats
path: root/Include/unicodeobject.h
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2007-02-25 19:44:48 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2007-02-25 19:44:48 (GMT)
commitee3a1b5244e60566c5d5c8f6a1ea4b381de99f1c (patch)
treead52a17fc77530870a575107a7cea9c27de17606 /Include/unicodeobject.h
parent5a3e812444609329b30be837a08c11269d917b72 (diff)
downloadcpython-ee3a1b5244e60566c5d5c8f6a1ea4b381de99f1c.zip
cpython-ee3a1b5244e60566c5d5c8f6a1ea4b381de99f1c.tar.gz
cpython-ee3a1b5244e60566c5d5c8f6a1ea4b381de99f1c.tar.bz2
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.
Diffstat (limited to 'Include/unicodeobject.h')
-rw-r--r--Include/unicodeobject.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 33aa185..0bad8c3 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -392,7 +392,8 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyUnicode_Type;
-#define PyUnicode_Check(op) PyObject_TypeCheck(op, &PyUnicode_Type)
+#define PyUnicode_Check(op) \
+ PyType_FastSubclass((op)->ob_type, Py_TPFLAGS_UNICODE_SUBCLASS)
#define PyUnicode_CheckExact(op) ((op)->ob_type == &PyUnicode_Type)
/* Fast access macros */