]> granicus.if.org Git - python/commitdiff
GCC was complaining that 'value' in dictiter_iternextvalue() wasn't
authorGuido van Rossum <guido@python.org>
Sat, 20 Mar 2004 19:11:58 +0000 (19:11 +0000)
committerGuido van Rossum <guido@python.org>
Sat, 20 Mar 2004 19:11:58 +0000 (19:11 +0000)
necessarily always set before used.  Between Tim, Armin & me we
couldn't prove GCC wrong, so we decided to fix the algorithm.  This
version is Armin's.

Objects/dictobject.c

index 3e369617a79c368f236ebd0a81432c18a7686d37..0f2a271af47caed34951ee709825850a45707c7d 100644 (file)
@@ -2148,15 +2148,16 @@ static PyObject *dictiter_iternextvalue(dictiterobject *di)
        }
 
        i = di->di_pos;
-       if (i < 0)
+       mask = d->ma_mask;
+       if (i < 0 || i > mask)
                goto fail;
        ep = d->ma_table;
-       mask = d->ma_mask;
-       while (i <= mask && (value=ep[i].me_value) == NULL)
+       while ((value=ep[i].me_value) == NULL) {
                i++;
+               if (i > mask)
+                       goto fail;
+       }
        di->di_pos = i+1;
-       if (i > mask)
-               goto fail;
        di->len--;
        Py_INCREF(value);
        return value;