diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-26 18:29:58 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-26 18:29:58 (GMT) |
commit | 9ac73c2052a8c50ca8e27a788bea859c7b6431eb (patch) | |
tree | f6c55fcad19f1bb4cc9c0ccb358269982a275e38 | |
parent | 4e3aab7c7358fb04e2bc7b79836989c4ce8a9f56 (diff) | |
parent | 46825d2399a461b060f2451c93cd0c349c5df485 (diff) | |
download | cpython-9ac73c2052a8c50ca8e27a788bea859c7b6431eb.zip cpython-9ac73c2052a8c50ca8e27a788bea859c7b6431eb.tar.gz cpython-9ac73c2052a8c50ca8e27a788bea859c7b6431eb.tar.bz2 |
Issue #28194: Clean up some checks in dict implementation.
Patch by Xiang Zhang.
-rw-r--r-- | Objects/dictobject.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 25fdedd..36ea8f1 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -710,13 +710,14 @@ top: } 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 @@ top: continue; } ep = &ep0[ix]; + assert(ep->me_key != NULL); if (ep->me_key == key) { if (hashpos != NULL) { *hashpos = i; @@ -762,7 +764,7 @@ top: *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 @@ lookdict_unicode(PyDictObject *mp, PyObject *key, } 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 @@ lookdict_unicode(PyDictObject *mp, PyObject *key, 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 @@ lookdict_split(PyDictObject *mp, PyObject *key, } 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 @@ lookdict_split(PyDictObject *mp, PyObject *key, } 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 @@ dict_traverse(PyObject *op, visitproc visit, void *arg) { 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) { |