Mercurial > cpython-lru_cache-weakref
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) |
