Micro optimizations after staring at gprof output for a while.

This commit is contained in:
Guido van Rossum 2007-09-18 04:30:42 +00:00
parent 54cf12b625
commit 4d0277233e
2 changed files with 9 additions and 11 deletions

View File

@ -566,8 +566,8 @@ PyDict_GetItem(PyObject *op, PyObject *key)
PyThreadState *tstate;
if (!PyDict_Check(op))
return NULL;
if (!PyString_CheckExact(key) ||
(hash = ((PyStringObject *) key)->ob_shash) == -1)
if (!PyUnicode_CheckExact(key) ||
(hash = ((PyUnicodeObject *) key)->hash) == -1)
{
hash = PyObject_Hash(key);
if (hash == -1) {
@ -650,12 +650,9 @@ PyDict_SetItem(register PyObject *op, PyObject *key, PyObject *value)
assert(key);
assert(value);
mp = (dictobject *)op;
if (PyString_CheckExact(key)) {
hash = ((PyStringObject *)key)->ob_shash;
if (hash == -1)
hash = PyObject_Hash(key);
}
else {
if (!PyUnicode_CheckExact(key) ||
(hash = ((PyUnicodeObject *) key)->hash) == -1)
{
hash = PyObject_Hash(key);
if (hash == -1)
return -1;

View File

@ -6597,9 +6597,10 @@ unicode_hash(PyUnicodeObject *self)
/* Since Unicode objects compare equal to their UTF-8 string
counterparts, we hash the UTF-8 string. */
PyObject *v = _PyUnicode_AsDefaultEncodedString((PyObject*)self, NULL);
long x = PyObject_Hash(v);
self->hash = x;
return x;
if (v == NULL)
return -1;
assert(PyString_CheckExact(v));
return self->hash = v->ob_type->tp_hash(v);
}
}