Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 25017:aa4503556339 legacy-trunk
string_contains(): speed up by avoiding function calls where
possible. This always called PyUnicode_Check() and PyString_Check(),
at least one of which would call PyType_IsSubtype(). Also, this would
call PyString_Size() on known string objects.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Sat, 24 Aug 2002 06:57:49 +0000 |
| parents | 762dd09edb83 |
| children | 0337dad8403e |
line wrap: on
line diff
--- a/Objects/stringobject.c Sat Aug 24 06:54:19 2002 +0000 +++ b/Objects/stringobject.c Sat Aug 24 06:57:49 2002 +0000 @@ -991,24 +991,27 @@ { const char *lhs, *rhs, *end; int size; + + if (!PyString_CheckExact(el)) { #ifdef Py_USING_UNICODE - if (PyUnicode_Check(el)) - return PyUnicode_Contains(a, el); + if (PyUnicode_Check(el)) + return PyUnicode_Contains(a, el); #endif - if (!PyString_Check(el)) { - PyErr_SetString(PyExc_TypeError, - "'in <string>' requires string as left operand"); - return -1; + if (!PyString_Check(el)) { + PyErr_SetString(PyExc_TypeError, + "'in <string>' requires string as left operand"); + return -1; + } } - size = PyString_Size(el); + size = PyString_GET_SIZE(el); rhs = PyString_AS_STRING(el); lhs = PyString_AS_STRING(a); /* optimize for a single character */ if (size == 1) - return memchr(lhs, *rhs, PyString_Size(a)) != NULL; - - end = lhs + (PyString_Size(a) - size); + return memchr(lhs, *rhs, PyString_GET_SIZE(a)) != NULL; + + end = lhs + (PyString_GET_SIZE(a) - size); while (lhs <= end) { if (memcmp(lhs++, rhs, size) == 0) return 1;
