]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Micro optimizations after staring at gprof output for a while.
authorGuido van Rossum <guido@python.org>
Tue, 18 Sep 2007 04:30:42 +0000 (04:30 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 18 Sep 2007 04:30:42 +0000 (04:30 +0000)
Objects/dictobject.c
Objects/unicodeobject.c

index 539d73418a654750d9526dc034d863b057ef1f58..96089a16af0641a5db92d1706760bb7f8b625389 100644 (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;
index d52c080a593f4550e0919520d6ebf51af6032b2f..140ffaf0b6ead0d194efe9b33d3adbf61fcb88ce 100644 (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);
     }
 }