Skip to content

Commit 1cb0488

Browse files
committed
Fix obtaining dict for slots comparison
1 parent f051aa6 commit 1cb0488

File tree

1 file changed

+7
-0
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type

1 file changed

+7
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeNodes.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetInternalObjectArrayNode;
9494
import com.oracle.graal.python.builtins.objects.dict.PDict;
9595
import com.oracle.graal.python.builtins.objects.function.PFunction;
96+
import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
9697
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
9798
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
9899
import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.GetBaseClassNodeGen;
@@ -894,6 +895,9 @@ private String getTypeName(Object clazz) {
894895
private Object getSlotsFromDict(VirtualFrame frame, Object type) {
895896
Object dict = getObjectLibrary().lookupAttribute(type, frame, __DICT__);
896897
if (dict != PNone.NO_VALUE) {
898+
if (dict instanceof PMappingproxy) {
899+
dict = ((PMappingproxy) dict).getMapping();
900+
}
897901
HashingStorage storage = getDictStorageNode().execute((PHashingCollection) dict);
898902
return getHashingStorageLibrary().getItem(storage, __SLOTS__);
899903
}
@@ -1054,6 +1058,9 @@ protected Object getSlotsFromDict(Object type, LookupSpecialMethodNode.Dynamic l
10541058
Object getAttr = lookupGetAttribute.execute(type, __GETATTRIBUTE__, type, false);
10551059
Object dict = callGetAttr.executeObject(getAttr, type, __DICT__);
10561060
if (dict != PNone.NO_VALUE) {
1061+
if (dict instanceof PMappingproxy) {
1062+
dict = ((PMappingproxy) dict).getMapping();
1063+
}
10571064
HashingStorage storage = getDictStorageNode.execute((PHashingCollection) dict);
10581065
return lib.getItem(storage, __SLOTS__);
10591066
}

0 commit comments

Comments
 (0)