Skip to content

Commit 2098456

Browse files
committed
Make mappingproxy into a real proxy
1 parent cb89a18 commit 2098456

File tree

12 files changed

+102
-229
lines changed

12 files changed

+102
-229
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_types.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
*graalpython.lib-python.3.test.test_types.CoroutineTests.test_wrong_args
2525
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_constructor
2626
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_contains
27+
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_copy
2728
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_get
2829
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_iterators
2930
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_len
3031
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_methods
32+
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_missing
33+
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_views
3134
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_as_dict
3235
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_attrdel
3336
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_attrget

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ private static String[] initializeCoreFiles() {
219219
"_descriptor",
220220
"object",
221221
"sys",
222-
"_mappingproxy",
223222
"str",
224223
"type",
225224
"_imp",

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@
121121
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
122122
import com.oracle.graal.python.builtins.objects.common.HashingStorage.DictEntry;
123123
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
124-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
125124
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetObjectArrayNode;
126125
import com.oracle.graal.python.builtins.objects.common.SequenceNodesFactory.GetObjectArrayNodeGen;
127126
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -174,6 +173,7 @@
174173
import com.oracle.graal.python.nodes.PGuards;
175174
import com.oracle.graal.python.nodes.SpecialAttributeNames;
176175
import com.oracle.graal.python.nodes.SpecialMethodNames;
176+
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
177177
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
178178
import com.oracle.graal.python.nodes.attributes.GetAttributeNode.GetAnyAttributeNode;
179179
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
@@ -1872,6 +1872,10 @@ public abstract static class StrNode extends PythonBuiltinNode {
18721872
@CompilationFinal private ConditionProfile isStringProfile;
18731873
@CompilationFinal private ConditionProfile isPStringProfile;
18741874

1875+
public final Object executeWith(VirtualFrame frame, Object arg) {
1876+
return executeWith(frame, PythonBuiltinClassType.PString, arg, PNone.NO_VALUE, PNone.NO_VALUE);
1877+
}
1878+
18751879
public abstract Object executeWith(VirtualFrame frame, Object strClass, Object arg, Object encoding, Object errors);
18761880

18771881
@Specialization(guards = {"!isNativeClass(strClass)", "isNoValue(arg)", "isNoValue(encoding)", "isNoValue(errors)"})
@@ -1970,6 +1974,10 @@ private ConditionProfile getIsPStringProfile() {
19701974
}
19711975
return isPStringProfile;
19721976
}
1977+
1978+
public static StrNode create() {
1979+
return BuiltinConstructorsFactory.StrNodeFactory.create(new ReadArgumentNode[0]);
1980+
}
19731981
}
19741982

19751983
// tuple([iterable])
@@ -3053,17 +3061,10 @@ Object initArgs(Object cls, Object[] args, @SuppressWarnings("unused") PKeyword[
30533061
@Builtin(name = "mappingproxy", constructsClass = PythonBuiltinClassType.PMappingproxy, isPublic = false, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2)
30543062
@GenerateNodeFactory
30553063
public abstract static class MappingproxyNode extends PythonBuiltinNode {
3056-
@Specialization
3057-
Object doMapping(Object klass, PHashingCollection obj,
3058-
@Cached HashingCollectionNodes.GetDictStorageNode getStorage) {
3059-
return factory().createMappingproxy(klass, getStorage.execute(obj));
3060-
}
3061-
3062-
@Specialization(guards = {"isMapping(frame, obj, lib)", "!isBuiltinMapping(obj)"}, limit = "1")
3063-
Object doMapping(VirtualFrame frame, Object klass, PythonObject obj,
3064-
@Cached("create()") HashingStorage.InitNode initNode,
3064+
@Specialization(guards = "isMapping(frame, obj, lib)", limit = "1")
3065+
Object doMapping(@SuppressWarnings("unused") VirtualFrame frame, Object klass, PythonObject obj,
30653066
@SuppressWarnings("unused") @CachedLibrary("obj") PythonObjectLibrary lib) {
3066-
return factory().createMappingproxy(klass, initNode.execute(frame, obj, PKeyword.EMPTY_KEYWORDS));
3067+
return factory().createMappingproxy(klass, obj);
30673068
}
30683069

30693070
@Specialization(guards = "isNoValue(none)")
@@ -3078,10 +3079,6 @@ Object doInvalid(@SuppressWarnings("unused") VirtualFrame frame, @SuppressWarnin
30783079
throw raise(TypeError, ErrorMessages.ARG_MUST_BE_S_NOT_P, "mappingproxy()", "mapping", obj);
30793080
}
30803081

3081-
protected static boolean isBuiltinMapping(Object o) {
3082-
return o instanceof PHashingCollection;
3083-
}
3084-
30853082
protected boolean isMapping(VirtualFrame frame, Object o, PythonObjectLibrary library) {
30863083
PythonContext context = getContextRef().get();
30873084
if (o instanceof PList || o instanceof PTuple) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/DynamicObjectNativeWrapper.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@
9898
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
9999
import com.oracle.graal.python.builtins.objects.function.PFunction;
100100
import com.oracle.graal.python.builtins.objects.ints.PInt;
101-
import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
102101
import com.oracle.graal.python.builtins.objects.memoryview.PBuffer;
103102
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
104103
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
@@ -599,8 +598,9 @@ static Object doTpDict(PythonManagedClass object, @SuppressWarnings("unused") Py
599598
// copy all mappings to the new storage
600599
storage = storageLib.addAllToOther(dictStorage, storage);
601600
}
602-
lib.setDict(object, factory.createMappingproxy(storage));
603-
return toSulongNode.execute(factory.createDict(storage));
601+
PDict newDict = factory.createDict(storage);
602+
lib.setDict(object, newDict);
603+
return toSulongNode.execute(newDict);
604604
}
605605

606606
@Specialization(guards = "eq(TP_TRAVERSE, key) || eq(TP_CLEAR, key)")
@@ -775,14 +775,11 @@ static Object doTpDict(PythonClass object, @SuppressWarnings("unused") PythonNat
775775
@CachedLibrary("object") PythonObjectLibrary lib,
776776
@Shared("toSulongNode") @Cached CExtNodes.ToSulongNode toSulongNode) throws UnsupportedMessageException {
777777
PHashingCollection dict = lib.getDict(object);
778-
if (!(dict instanceof PDict)) {
779-
assert dict instanceof PMappingproxy || dict == null;
780-
// If 'dict instanceof PMappingproxy', it seems that someone already used '__dict__'
781-
// on this type and created a mappingproxy object. We need to replace it by a dict.
778+
if (dict == null) {
782779
dict = factory.createDictFixedStorage(object);
783780
lib.setDict(object, dict);
784781
}
785-
assert dict != null;
782+
assert dict instanceof PDict;
786783
return toSulongNode.execute(dict);
787784
}
788785

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingCollectionNodes.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import com.oracle.graal.python.builtins.objects.dict.PDict;
5151
import com.oracle.graal.python.builtins.objects.dict.PDictView;
5252
import com.oracle.graal.python.builtins.objects.function.PArguments;
53-
import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
5453
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5554
import com.oracle.graal.python.builtins.objects.set.PBaseSet;
5655
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -128,11 +127,6 @@ static HashingStorage get(PDict c) {
128127
return c.getDictStorage();
129128
}
130129

131-
@Specialization
132-
static HashingStorage get(PMappingproxy c) {
133-
return c.getDictStorage();
134-
}
135-
136130
public static GetDictStorageNode create() {
137131
return GetDictStorageNodeGen.create();
138132
}
@@ -158,11 +152,6 @@ static void set(PDict c, HashingStorage storage) {
158152
c.setDictStorage(storage);
159153
}
160154

161-
@Specialization
162-
static void set(PMappingproxy c, HashingStorage storage) {
163-
c.setDictStorage(storage);
164-
}
165-
166155
public static SetDictStorageNode create() {
167156
return SetDictStorageNodeGen.create();
168157
}

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import com.oracle.graal.python.builtins.objects.function.PArguments;
6868
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
6969
import com.oracle.graal.python.builtins.objects.function.PKeyword;
70-
import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
7170
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
7271
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
7372
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -445,18 +444,6 @@ Object doDictDict(VirtualFrame frame, PDict self, PDict other,
445444
}
446445
}
447446

448-
@Specialization(limit = "3")
449-
Object doDictProxy(VirtualFrame frame, PDict self, PMappingproxy other,
450-
@Cached("createBinaryProfile()") ConditionProfile hasFrame,
451-
@Cached GetDictStorageNode getStorage,
452-
@CachedLibrary("getStorage.execute(self)") HashingStorageLibrary lib) {
453-
if (hasFrame.profile(frame != null)) {
454-
return lib.equalsWithState(getStorage.execute(self), getStorage.execute(other), PArguments.getThreadState(frame));
455-
} else {
456-
return lib.equals(getStorage.execute(self), getStorage.execute(other));
457-
}
458-
}
459-
460447
@Fallback
461448
@SuppressWarnings("unused")
462449
static PNotImplemented doGeneric(Object self, Object other) {

0 commit comments

Comments
 (0)