Skip to content

Commit 9d00ae1

Browse files
committed
ForeignDictIterable -> ForeignDict since all dicts are iterable
1 parent 8ab6454 commit 9d00ae1

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_interop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def t(obj):
146146
self.assertEqual(t(True), polyglot.ForeignBoolean)
147147
self.assertEqual(t(BaseException()), polyglot.ForeignException)
148148
self.assertEqual(t(lambda: None), polyglot.ForeignExecutable)
149-
self.assertEqual(t({}), polyglot.ForeignDictIterable) # TODO
149+
self.assertEqual(t({}), polyglot.ForeignDict)
150150
# ForeignInstantiable
151151
self.assertEqual(t((e for e in [1])), polyglot.ForeignIteratorIterable)
152152
self.assertEqual(t(iter([1])), polyglot.ForeignIteratorIterable)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/object/GetForeignObjectClassNode.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,17 +181,21 @@ private PythonManagedClass resolvePolyglotForeignClassAndSetInCache(int traits)
181181

182182
// Special naming rules:
183183
// Foreign...Instantiable...AbstractClass -> Foreign......Class
184-
// Foreign...List...Iterable -> Foreign...List... (since all Python lists are iterables)
184+
// Foreign...List...Iterable -> Foreign...List... (since all Python lists are iterable)
185+
// Foreign...Dict...Iterable -> Foreign...Dict... (since all Python dicts are iterable)
185186
@TruffleBoundary
186187
private PythonManagedClass resolvePolyglotForeignClass(int traits) {
187188
PythonBuiltinClass base = getContext().lookupType(PythonBuiltinClassType.ForeignObject);
188189
if (traits == 0) {
189190
return base;
190191
}
191192

192-
// For foreign array+iterable, ignore the iterable trait completely, foreign arrays inherit
193-
// from the Python list class and all lists are iterables (they have __iter__)
194-
if (Trait.ARRAY.isSet(traits) && Trait.ITERABLE.isSet(traits)) {
193+
/*
194+
* For foreign array/hash+iterable, ignore the iterable trait completely, foreign
195+
* arrays/hashes inherit from the Python list/dict class and all lists/dicts are iterables
196+
* (they have __iter__)
197+
*/
198+
if ((Trait.ARRAY.isSet(traits) || Trait.HASH.isSet(traits)) && Trait.ITERABLE.isSet(traits)) {
195199
return classForTraits(traits - Trait.ITERABLE.bit);
196200
}
197201

0 commit comments

Comments
 (0)