]> granicus.if.org Git - python/commitdiff
remove memory indirections in dict_traverse (closes #27956)
authorBenjamin Peterson <benjamin@python.org>
Mon, 5 Sep 2016 19:12:59 +0000 (12:12 -0700)
committerBenjamin Peterson <benjamin@python.org>
Mon, 5 Sep 2016 19:12:59 +0000 (12:12 -0700)
Objects/dictobject.c

index 7a3ed42f0f38c5391ccee7badb267d72e47c98df..d99323807463fe8f6ad203c87d83fd4aa55fc8c2 100644 (file)
@@ -2519,24 +2519,26 @@ dict_popitem(PyDictObject *mp)
 static int
 dict_traverse(PyObject *op, visitproc visit, void *arg)
 {
-    Py_ssize_t i, n;
     PyDictObject *mp = (PyDictObject *)op;
-    if (mp->ma_keys->dk_lookup == lookdict) {
-        for (i = 0; i < DK_SIZE(mp->ma_keys); i++) {
-            if (mp->ma_keys->dk_entries[i].me_value != NULL) {
-                Py_VISIT(mp->ma_keys->dk_entries[i].me_value);
-                Py_VISIT(mp->ma_keys->dk_entries[i].me_key);
+    PyDictKeysObject *keys = mp->ma_keys;
+    PyDictKeyEntry *entries = &keys->dk_entries[0];
+    Py_ssize_t i, n = DK_SIZE(mp->ma_keys);
+    if (keys->dk_lookup == lookdict) {
+        for (i = 0; i < n; i++) {
+            if (entries[i].me_value != NULL) {
+                Py_VISIT(entries[i].me_value);
+                Py_VISIT(entries[i].me_key);
             }
         }
     } else {
         if (mp->ma_values != NULL) {
-            for (i = 0, n = DK_SIZE(mp->ma_keys); i < n; i++) {
+            for (i = 0; i < n; i++) {
                 Py_VISIT(mp->ma_values[i]);
             }
         }
         else {
-            for (i = 0, n = DK_SIZE(mp->ma_keys); i < n; i++) {
-                Py_VISIT(mp->ma_keys->dk_entries[i].me_value);
+            for (i = 0; i < n; i++) {
+                Py_VISIT(entries[i].me_value);
             }
         }
     }