<
8000
div class="d-none">
File tree Expand file tree Collapse file tree 2 files changed +6
-3
lines changed
Misc/NEWS.d/next/Core and Builtins Expand file tree Collapse file tree 2 files changed +6
-3
lines changed Original file line number Diff line number Diff line change
1
+ Fix iterator cache mechanism of :class: `OrderedDict `.
Original file line number Diff line number Diff line change @@ -1288,6 +1288,7 @@ PyDoc_STRVAR(odict_reversed__doc__, "od.__reversed__() <==> reversed(od)");
1288
1288
#define _odict_ITER_REVERSED 1
1289
1289
#define _odict_ITER_KEYS 2
1290
1290
#define _odict_ITER_VALUES 4
1291
+ #define _odict_ITER_ITEMS (_odict_ITER_KEYS|_odict_ITER_VALUES)
1291
1292
1292
1293
/* forward */
1293
1294
static PyObject * odictiter_new (PyODictObject * , int );
@@ -1705,7 +1706,7 @@ odictiter_dealloc(odictiterobject *di)
1705
1706
_PyObject_GC_UNTRACK (di );
1706
1707
Py_XDECREF (di -> di_odict );
1707
1708
Py_XDECREF (di -> di_current );
1708
- if (di -> kind & ( _odict_ITER_KEYS | _odict_ITER_VALUES ) ) {
1709
+ if (( di -> kind & _odict_ITER_ITEMS ) == _odict_ITER_ITEMS ) {
1709
1710
Py_DECREF (di -> di_result );
1710
1711
}
1711
1712
PyObject_GC_Del (di );
@@ -1911,15 +1912,16 @@ odictiter_new(PyODictObject *od, int kind)
1911
1912
if (di == NULL )
1912
1913
return NULL ;
1913
1914
1914
- if (kind & ( _odict_ITER_KEYS | _odict_ITER_VALUES )) {
1915
+ if (( kind & _odict_ITER_ITEMS ) == _odict_ITER_ITEMS ) {
1915
1916
di -> di_result = PyTuple_Pack (2 , Py_None , Py_None );
1916
1917
if (di -> di_result == NULL ) {
1917
1918
Py_DECREF (di );
1918
1919
return NULL ;
1919
1920
}
1920
1921
}
1921
- else
1922
+ else {
1922
1923
di -> di_result = NULL ;
1924
+ }
1923
1925
1924
1926
di -> kind = kind ;
1925
1927
node = reversed ? _odict_LAST (od ) : _odict_FIRST (od );
0 commit comments