comparison Include/stringobject.h @ 40908:d01bd37bf5ce legacy-trunk

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.
author Neal Norwitz <nnorwitz@gmail.com>
date Sun, 25 Feb 2007 19:44:48 +0000
parents 7fdc639bc5b4
children 6620a510e9a9
comparison
equal deleted inserted replaced
40907:0c410c78531c 40908:d01bd37bf5ce
53 #define SSTATE_INTERNED_IMMORTAL 2 53 #define SSTATE_INTERNED_IMMORTAL 2
54 54
55 PyAPI_DATA(PyTypeObject) PyBaseString_Type; 55 PyAPI_DATA(PyTypeObject) PyBaseString_Type;
56 PyAPI_DATA(PyTypeObject) PyString_Type; 56 PyAPI_DATA(PyTypeObject) PyString_Type;
57 57
58 #define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type) 58 #define PyString_Check(op) \
59 PyType_FastSubclass((op)->ob_type, Py_TPFLAGS_STRING_SUBCLASS)
59 #define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type) 60 #define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type)
60 61
61 PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, Py_ssize_t); 62 PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, Py_ssize_t);
62 PyAPI_FUNC(PyObject *) PyString_FromString(const char *); 63 PyAPI_FUNC(PyObject *) PyString_FromString(const char *);
63 PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list) 64 PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list)