[Python-checkins] cpython (3.6): Issue #28194: Clean up some checks in dict implementation.

serhiy.storchaka python-checkins at python.org
Mon Sep 26 14:30:20 EDT 2016


https://hg.python.org/cpython/rev/1d41d741bb5b
changeset:   104068:1d41d741bb5b
branch:      3.6
parent:      104066:21336392a680
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Mon Sep 26 21:29:34 2016 +0300
summary:
  Issue #28194: Clean up some checks in dict implementation.
Patch by Xiang Zhang.

files:
  Objects/dictobject.c |  21 +++++++++++----------
  1 files changed, 11 insertions(+), 10 deletions(-)


diff --git a/Objects/dictobject.c b/Objects/dictobject.c
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -710,13 +710,14 @@
     }
     else {
         ep = &ep0[ix];
+        assert(ep->me_key != NULL);
         if (ep->me_key == key) {
             *value_addr = &ep->me_value;
             if (hashpos != NULL)
                 *hashpos = i;
             return ix;
         }
-        if (ep->me_key != NULL && ep->me_hash == hash) {
+        if (ep->me_hash == hash) {
             startkey = ep->me_key;
             Py_INCREF(startkey);
             cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
@@ -755,6 +756,7 @@
             continue;
         }
         ep = &ep0[ix];
+        assert(ep->me_key != NULL);
         if (ep->me_key == key) {
             if (hashpos != NULL) {
                 *hashpos = i;
@@ -762,7 +764,7 @@
             *value_addr = &ep->me_value;
             return ix;
         }
-        if (ep->me_hash == hash && ep->me_key != NULL) {
+        if (ep->me_hash == hash) {
             startkey = ep->me_key;
             Py_INCREF(startkey);
             cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
@@ -822,9 +824,9 @@
     }
     else {
         ep = &ep0[ix];
-        /* only split table can be ix != DKIX_DUMMY && me_key == NULL */
         assert(ep->me_key != NULL);
-        if (ep->me_key == key || (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
+        if (ep->me_key == key
+            || (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
             if (hashpos != NULL)
                 *hashpos = i;
             *value_addr = &ep->me_value;
@@ -849,10 +851,9 @@
             continue;
         }
         ep = &ep0[ix];
+        assert(ep->me_key != NULL);
         if (ep->me_key == key
-            || (ep->me_hash == hash
-                && ep->me_key != NULL
-                && unicode_eq(ep->me_key, key))) {
+            || (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
             *value_addr = &ep->me_value;
             if (hashpos != NULL) {
                 *hashpos = i;
@@ -962,7 +963,7 @@
     }
     assert(ix >= 0);
     ep = &ep0[ix];
-    assert(ep->me_key == NULL || PyUnicode_CheckExact(ep->me_key));
+    assert(ep->me_key != NULL && PyUnicode_CheckExact(ep->me_key));
     if (ep->me_key == key ||
         (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
         if (hashpos != NULL)
@@ -981,7 +982,7 @@
         }
         assert(ix >= 0);
         ep = &ep0[ix];
-        assert(ep->me_key == NULL || PyUnicode_CheckExact(ep->me_key));
+        assert(ep->me_key != NULL && PyUnicode_CheckExact(ep->me_key));
         if (ep->me_key == key ||
             (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
             if (hashpos != NULL)
@@ -2881,7 +2882,7 @@
 {
     PyDictObject *mp = (PyDictObject *)op;
     PyDictKeysObject *keys = mp->ma_keys;
-    PyDictKeyEntry *entries = DK_ENTRIES(mp->ma_keys);
+    PyDictKeyEntry *entries = DK_ENTRIES(keys);
     Py_ssize_t i, n = keys->dk_nentries;
 
     if (keys->dk_lookup == lookdict) {

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list