mirror of https://github.com/python/cpython
Issue #28194: Clean up some checks in dict implementation.
Patch by Xiang Zhang.
This commit is contained in:
parent
4781b59185
commit
46825d2399
|
@ -710,13 +710,14 @@ top:
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ep = &ep0[ix];
|
ep = &ep0[ix];
|
||||||
|
assert(ep->me_key != NULL);
|
||||||
if (ep->me_key == key) {
|
if (ep->me_key == key) {
|
||||||
*value_addr = &ep->me_value;
|
*value_addr = &ep->me_value;
|
||||||
if (hashpos != NULL)
|
if (hashpos != NULL)
|
||||||
*hashpos = i;
|
*hashpos = i;
|
||||||
return ix;
|
return ix;
|
||||||
}
|
}
|
||||||
if (ep->me_key != NULL && ep->me_hash == hash) {
|
if (ep->me_hash == hash) {
|
||||||
startkey = ep->me_key;
|
startkey = ep->me_key;
|
||||||
Py_INCREF(startkey);
|
Py_INCREF(startkey);
|
||||||
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
|
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
|
||||||
|
@ -755,6 +756,7 @@ top:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ep = &ep0[ix];
|
ep = &ep0[ix];
|
||||||
|
assert(ep->me_key != NULL);
|
||||||
if (ep->me_key == key) {
|
if (ep->me_key == key) {
|
||||||
if (hashpos != NULL) {
|
if (hashpos != NULL) {
|
||||||
*hashpos = i;
|
*hashpos = i;
|
||||||
|
@ -762,7 +764,7 @@ top:
|
||||||
*value_addr = &ep->me_value;
|
*value_addr = &ep->me_value;
|
||||||
return ix;
|
return ix;
|
||||||
}
|
}
|
||||||
if (ep->me_hash == hash && ep->me_key != NULL) {
|
if (ep->me_hash == hash) {
|
||||||
startkey = ep->me_key;
|
startkey = ep->me_key;
|
||||||
Py_INCREF(startkey);
|
Py_INCREF(startkey);
|
||||||
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
|
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
|
||||||
|
@ -822,9 +824,9 @@ lookdict_unicode(PyDictObject *mp, PyObject *key,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ep = &ep0[ix];
|
ep = &ep0[ix];
|
||||||
/* only split table can be ix != DKIX_DUMMY && me_key == NULL */
|
|
||||||
assert(ep->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)
|
if (hashpos != NULL)
|
||||||
*hashpos = i;
|
*hashpos = i;
|
||||||
*value_addr = &ep->me_value;
|
*value_addr = &ep->me_value;
|
||||||
|
@ -849,10 +851,9 @@ lookdict_unicode(PyDictObject *mp, PyObject *key,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ep = &ep0[ix];
|
ep = &ep0[ix];
|
||||||
|
assert(ep->me_key != NULL);
|
||||||
if (ep->me_key == key
|
if (ep->me_key == key
|
||||||
|| (ep->me_hash == hash
|
|| (ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
|
||||||
&& ep->me_key != NULL
|
|
||||||
&& unicode_eq(ep->me_key, key))) {
|
|
||||||
*value_addr = &ep->me_value;
|
*value_addr = &ep->me_value;
|
||||||
if (hashpos != NULL) {
|
if (hashpos != NULL) {
|
||||||
*hashpos = i;
|
*hashpos = i;
|
||||||
|
@ -962,7 +963,7 @@ lookdict_split(PyDictObject *mp, PyObject *key,
|
||||||
}
|
}
|
||||||
assert(ix >= 0);
|
assert(ix >= 0);
|
||||||
ep = &ep0[ix];
|
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 ||
|
if (ep->me_key == key ||
|
||||||
(ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
|
(ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
|
||||||
if (hashpos != NULL)
|
if (hashpos != NULL)
|
||||||
|
@ -981,7 +982,7 @@ lookdict_split(PyDictObject *mp, PyObject *key,
|
||||||
}
|
}
|
||||||
assert(ix >= 0);
|
assert(ix >= 0);
|
||||||
ep = &ep0[ix];
|
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 ||
|
if (ep->me_key == key ||
|
||||||
(ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
|
(ep->me_hash == hash && unicode_eq(ep->me_key, key))) {
|
||||||
if (hashpos != NULL)
|
if (hashpos != NULL)
|
||||||
|
@ -2881,7 +2882,7 @@ dict_traverse(PyObject *op, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
PyDictObject *mp = (PyDictObject *)op;
|
PyDictObject *mp = (PyDictObject *)op;
|
||||||
PyDictKeysObject *keys = mp->ma_keys;
|
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;
|
Py_ssize_t i, n = keys->dk_nentries;
|
||||||
|
|
||||||
if (keys->dk_lookup == lookdict) {
|
if (keys->dk_lookup == lookdict) {
|
||||||
|
|
Loading…
Reference in New Issue