Skip to content

Commit 3ad8a3c

Browse files
committed
Merge remote-tracking branch 'github/pull/1228' into msimacek/GR-80787-GitHub_PRs_1227-1232
2 parents 801a7b8 + 66d2e95 commit 3ad8a3c

5 files changed

Lines changed: 33 additions & 5 deletions

File tree

‎graalpython/com.oracle.graal.python.test/src/tests/test_dict.py‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,3 +2007,16 @@ def test_bulk_value_update_preserves_iterators():
20072007
d.update({k: -v for k, v in d.items()})
20082008
assert list(it) == expected[1:]
20092009
assert list(reverse) == expected[-2::-1]
2010+
2011+
2012+
def test_reversed_iterator_types():
2013+
d = {1: 'a', 2: 'b'}
2014+
assert type(reversed(d)).__name__ == 'dict_reversekeyiterator'
2015+
assert type(reversed(d.keys())).__name__ == 'dict_reversekeyiterator'
2016+
assert type(reversed(d.values())).__name__ == 'dict_reversevalueiterator'
2017+
assert type(reversed(d.items())).__name__ == 'dict_reverseitemiterator'
2018+
assert type(reversed(d)) is not type(iter(d))
2019+
assert_raises(TypeError, type(reversed(d)))
2020+
assert_raises(TypeError, type(reversed(d.values())))
2021+
assert_raises(TypeError, type(reversed(d.items())))
2022+
assert list(reversed(d.items())) == [(2, 'b'), (1, 'a')]

‎graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictBuiltins.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ static Object run(Object self,
436436
@Cached HashingStorageGetReverseIterator getReverseIterator,
437437
@Bind PythonLanguage language) {
438438
var storage = getStorageNode.execute(inliningTarget, self);
439-
return PFactory.createDictKeyIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
439+
return PFactory.createDictReverseKeyIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
440440
}
441441
}
442442

‎graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictValuesBuiltins.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2025, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2026, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -109,7 +109,7 @@ static Object doPDictValuesView(PDictValuesView self,
109109
@Cached HashingStorageGetReverseIterator getReverseIter,
110110
@Bind PythonLanguage language) {
111111
HashingStorage storage = self.getWrappedStorage();
112-
return PFactory.createDictValueIterator(language, getReverseIter.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
112+
return PFactory.createDictReverseValueIterator(language, getReverseIter.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
113113
}
114114
}
115115
}

‎graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictViewBuiltins.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ static Object getReversedKeysViewIter(PDictKeysView self,
193193
@Shared @Cached HashingStorageGetReverseIterator getReverseIterator,
194194
@Bind PythonLanguage language) {
195195
HashingStorage storage = self.getWrappedStorage();
196-
return PFactory.createDictKeyIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
196+
return PFactory.createDictReverseKeyIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
197197
}
198198

199199
@Specialization
@@ -203,7 +203,7 @@ static Object getReversedItemsViewIter(PDictItemsView self,
203203
@Shared @Cached HashingStorageGetReverseIterator getReverseIterator,
204204
@Bind PythonLanguage language) {
205205
HashingStorage storage = self.getWrappedStorage();
206-
return PFactory.createDictItemIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
206+
return PFactory.createDictReverseItemIterator(language, getReverseIterator.execute(inliningTarget, storage), storage, lenNode.execute(inliningTarget, storage));
207207
}
208208
}
209209

‎graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PFactory.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,14 +1085,29 @@ public static PDictItemIterator createDictItemIterator(PythonLanguage language,
10851085
initialSize);
10861086
}
10871087

1088+
public static PDictItemIterator createDictReverseItemIterator(PythonLanguage language, HashingStorageNodes.HashingStorageIterator iterator, HashingStorage hashingStorage, int initialSize) {
1089+
return new PDictItemIterator(PythonBuiltinClassType.PDictReverseItemIterator, PythonBuiltinClassType.PDictReverseItemIterator.getInstanceShape(language), iterator, hashingStorage,
1090+
initialSize);
1091+
}
1092+
10881093
public static PDictKeyIterator createDictKeyIterator(PythonLanguage language, HashingStorageNodes.HashingStorageIterator iterator, HashingStorage hashingStorage, int initialSize) {
10891094
return new PDictKeyIterator(PythonBuiltinClassType.PDictKeyIterator, PythonBuiltinClassType.PDictKeyIterator.getInstanceShape(language), iterator, hashingStorage, initialSize);
10901095
}
10911096

1097+
public static PDictKeyIterator createDictReverseKeyIterator(PythonLanguage language, HashingStorageNodes.HashingStorageIterator iterator, HashingStorage hashingStorage, int initialSize) {
1098+
return new PDictKeyIterator(PythonBuiltinClassType.PDictReverseKeyIterator, PythonBuiltinClassType.PDictReverseKeyIterator.getInstanceShape(language), iterator, hashingStorage,
1099+
initialSize);
1100+
}
1101+
10921102
public static PDictValueIterator createDictValueIterator(PythonLanguage language, HashingStorageNodes.HashingStorageIterator iterator, HashingStorage hashingStorage, int initialSize) {
10931103
return new PDictValueIterator(PythonBuiltinClassType.PDictValueIterator, PythonBuiltinClassType.PDictValueIterator.getInstanceShape(language), iterator, hashingStorage, initialSize);
10941104
}
10951105

1106+
public static PDictValueIterator createDictReverseValueIterator(PythonLanguage language, HashingStorageNodes.HashingStorageIterator iterator, HashingStorage hashingStorage, int initialSize) {
1107+
return new PDictValueIterator(PythonBuiltinClassType.PDictReverseValueIterator, PythonBuiltinClassType.PDictReverseValueIterator.getInstanceShape(language), iterator, hashingStorage,
1108+
initialSize);
1109+
}
1110+
10961111
public static Object createSentinelIterator(PythonLanguage language, Object callable, Object sentinel) {
10971112
return new PSentinelIterator(PythonBuiltinClassType.PSentinelIterator, PythonBuiltinClassType.PSentinelIterator.getInstanceShape(language), callable, sentinel);
10981113
}

0 commit comments

Comments
 (0)