]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Mchael Hudson pointed out that the code for detecting changes in
authorGuido van Rossum <guido@python.org>
Wed, 2 May 2001 15:13:44 +0000 (15:13 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 2 May 2001 15:13:44 +0000 (15:13 +0000)
dictionary size was comparing ma_size, the hash table size, which is
always a power of two, rather than ma_used, wich changes on each
insertion or deletion.  Fixed this.

Objects/dictobject.c

index b374aeb64f046b2e6368e75cad874fd9cae3bbff..96d779d77741b2a6df4a886bb15fc09164e533a8 100644 (file)
@@ -1479,7 +1479,7 @@ extern PyTypeObject PyDictIter_Type; /* Forward */
 typedef struct {
        PyObject_HEAD
        dictobject *di_dict;
-       int di_size;
+       int di_used;
        int di_pos;
        binaryfunc di_select;
 } dictiterobject;
@@ -1493,7 +1493,7 @@ dictiter_new(dictobject *dict, binaryfunc select)
                return NULL;
        Py_INCREF(dict);
        di->di_dict = dict;
-       di->di_size = dict->ma_size;
+       di->di_used = dict->ma_used;
        di->di_pos = 0;
        di->di_select = select;
        return (PyObject *)di;
@@ -1511,7 +1511,7 @@ dictiter_next(dictiterobject *di, PyObject *args)
 {
        PyObject *key, *value;
 
-       if (di->di_size != di->di_dict->ma_size) {
+       if (di->di_used != di->di_dict->ma_used) {
                PyErr_SetString(PyExc_RuntimeError,
                                "dictionary changed size during iteration");
                return NULL;
@@ -1546,7 +1546,7 @@ static PyObject *dictiter_iternext(dictiterobject *di)
 {
        PyObject *key, *value;
 
-       if (di->di_size != di->di_dict->ma_size) {
+       if (di->di_used != di->di_dict->ma_used) {
                PyErr_SetString(PyExc_RuntimeError,
                                "dictionary changed size during iteration");
                return NULL;