Skip to content

Commit 288fe00

Browse files
committed
Change type of __dict__ to be really PDict
1 parent 68a0634 commit 288fe00

19 files changed

+88
-78
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@
8989
import com.oracle.graal.python.builtins.objects.code.PCode;
9090
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
9191
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
92-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
9392
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
9493
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetObjectArrayNode;
9594
import com.oracle.graal.python.builtins.objects.common.SequenceNodesFactory.GetObjectArrayNodeGen;
@@ -612,7 +611,7 @@ private static void setCustomLocals(Object[] args, Object locals) {
612611

613612
private void setBuiltinsInGlobals(VirtualFrame frame, PDict globals, HashingCollectionNodes.SetItemNode setBuiltins, PythonModule builtins, PythonObjectLibrary lib) {
614613
if (builtins != null) {
615-
PHashingCollection builtinsDict = lib.getDict(builtins);
614+
PDict builtinsDict = lib.getDict(builtins);
616615
if (builtinsDict == null) {
617616
builtinsDict = factory().createDictFixedStorage(builtins);
618617
try {
@@ -1954,7 +1953,7 @@ public Object globals(VirtualFrame frame,
19541953
PFrame callerFrame = readCallerFrameNode.executeWith(frame, 0);
19551954
PythonObject globals = callerFrame.getGlobals();
19561955
if (condProfile.profile(globals instanceof PythonModule)) {
1957-
PHashingCollection dict = lib.getDict(globals);
1956+
PDict dict = lib.getDict(globals);
19581957
if (dict == null) {
19591958
CompilerDirectives.transferToInterpreter();
19601959
dict = factory().createDictFixedStorage(globals);

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@
9090
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
9191
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
9292
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
93-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
9493
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
9594
import com.oracle.graal.python.builtins.objects.dict.PDict;
9695
import com.oracle.graal.python.builtins.objects.floats.PFloat;
@@ -587,7 +586,7 @@ static Object doTpDict(PythonManagedClass object, @SuppressWarnings("unused") Py
587586
@CachedLibrary(limit = "2") HashingStorageLibrary storageLib,
588587
@Shared("toSulongNode") @Cached CExtNodes.ToSulongNode toSulongNode) throws UnsupportedMessageException {
589588
// TODO(fa): we could cache the dict instance on the class' native wrapper
590-
PHashingCollection dict = lib.getDict(object);
589+
PDict dict = lib.getDict(object);
591590
HashingStorage dictStorage = dict != null ? dict.getDictStorage() : null;
592591
if (dictStorage instanceof DynamicObjectStorage) {
593592
// reuse the existing and modifiable storage
@@ -774,12 +773,11 @@ static Object doTpDict(PythonClass object, @SuppressWarnings("unused") PythonNat
774773
@Cached PythonObjectFactory factory,
775774
@CachedLibrary("object") PythonObjectLibrary lib,
776775
@Shared("toSulongNode") @Cached CExtNodes.ToSulongNode toSulongNode) throws UnsupportedMessageException {
777-
PHashingCollection dict = lib.getDict(object);
776+
PDict dict = lib.getDict(object);
778777
if (dict == null) {
779778
dict = factory.createDictFixedStorage(object);
780779
lib.setDict(object, dict);
781780
}
782-
assert dict instanceof PDict;
783781
return toSulongNode.execute(dict);
784782
}
785783

@@ -1132,7 +1130,7 @@ static Object doTpDict(PythonManagedClass object, @SuppressWarnings("unused") Py
11321130
for (HashingStorage.DictEntry entry : d.entries()) {
11331131
writeAttrNode.execute(object, entry.getKey(), entry.getValue());
11341132
}
1135-
PHashingCollection existing = lib.getDict(object);
1133+
PDict existing = lib.getDict(object);
11361134
if (existing != null) {
11371135
d.setDictStorage(existing.getDictStorage());
11381136
} else {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.ToJavaNode;
5757
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.ToSulongNode;
5858
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.AsPythonObjectNodeGen;
59-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
59+
import com.oracle.graal.python.builtins.objects.dict.PDict;
6060
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
6161
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6262
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
@@ -165,7 +165,7 @@ public boolean hasDict() {
165165

166166
@ExportMessage
167167
@SuppressWarnings({"static-method", "unused"})
168-
public void setDict(PHashingCollection value) throws UnsupportedMessageException {
168+
public void setDict(PDict value) throws UnsupportedMessageException {
169169
throw UnsupportedMessageException.create();
170170
}
171171

@@ -190,7 +190,7 @@ public Object asIndexWithState(ThreadState threadState,
190190
@GenerateUncached
191191
public abstract static class GetDict {
192192
@Specialization
193-
public static PHashingCollection getNativeDictionary(PythonAbstractNativeObject self,
193+
public static PDict getNativeDictionary(PythonAbstractNativeObject self,
194194
@Exclusive @Cached PRaiseNode raiseNode,
195195
@Exclusive @Cached ToSulongNode toSulong,
196196
@Exclusive @Cached ToJavaNode toJava,
@@ -199,8 +199,8 @@ public static PHashingCollection getNativeDictionary(PythonAbstractNativeObject
199199
try {
200200
Object func = importCAPISymbolNode.execute(FUN_PY_OBJECT_GENERIC_GET_DICT);
201201
Object javaDict = toJava.execute(interopLibrary.execute(func, toSulong.execute(self)));
202-
if (javaDict instanceof PHashingCollection) {
203-
return (PHashingCollection) javaDict;
202+
if (javaDict instanceof PDict) {
203+
return (PDict) javaDict;
204204
} else if (javaDict == PNone.NO_VALUE) {
205205
return null;
206206
} else {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/exception/BaseExceptionBuiltins.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4343
import com.oracle.graal.python.builtins.PythonBuiltins;
4444
import com.oracle.graal.python.builtins.objects.PNone;
45-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
4645
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
46+
import com.oracle.graal.python.builtins.objects.dict.PDict;
4747
import com.oracle.graal.python.builtins.objects.list.PList;
4848
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
4949
import com.oracle.graal.python.builtins.objects.traceback.PTraceback;
@@ -287,7 +287,7 @@ PBaseException doSetTraceback(PBaseException self, PTraceback tb) {
287287
@GenerateNodeFactory
288288
abstract static class DictNode extends PythonBinaryBuiltinNode {
289289
@Specialization(limit = "1")
290-
PNone dict(PBaseException self, PHashingCollection mapping,
290+
PNone dict(PBaseException self, PDict mapping,
291291
@CachedLibrary("self") PythonObjectLibrary lib) {
292292
try {
293293
lib.setDict(self, mapping);
@@ -301,7 +301,7 @@ PNone dict(PBaseException self, PHashingCollection mapping,
301301
@Specialization(guards = "isNoValue(mapping)", limit = "1")
302302
Object dict(PBaseException self, @SuppressWarnings("unused") PNone mapping,
303303
@CachedLibrary("self") PythonObjectLibrary lib) {
304-
PHashingCollection dict = lib.getDict(self);
304+
PDict dict = lib.getDict(self);
305305
if (dict == null) {
306306
dict = factory().createDictFixedStorage(self);
307307
try {
@@ -313,6 +313,11 @@ Object dict(PBaseException self, @SuppressWarnings("unused") PNone mapping,
313313
}
314314
return dict;
315315
}
316+
317+
@Specialization(guards = {"!isNoValue(mapping)", "!isDict(mapping)"})
318+
PNone dict(@SuppressWarnings("unused") PBaseException self, Object mapping) {
319+
throw raise(TypeError, ErrorMessages.DICT_MUST_BE_SET_TO_DICT, mapping);
320+
}
316321
}
317322

318323
@Builtin(name = __REDUCE__, minNumOfPositionalArgs = 1)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/function/AbstractFunctionBuiltins.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CALL__;
3737
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GET__;
3838
import static com.oracle.graal.python.runtime.exception.PythonErrorType.AttributeError;
39+
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
3940

4041
import java.util.List;
4142

@@ -45,7 +46,7 @@
4546
import com.oracle.graal.python.builtins.PythonBuiltins;
4647
import com.oracle.graal.python.builtins.objects.PNone;
4748
import com.oracle.graal.python.builtins.objects.cell.PCell;
48-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
49+
import com.oracle.graal.python.builtins.objects.dict.PDict;
4950
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
5051
import com.oracle.graal.python.builtins.objects.method.PMethod;
5152
import com.oracle.graal.python.builtins.objects.module.PythonModule;
@@ -153,7 +154,7 @@ Object getGlobals(PFunction self,
153154
// see the make_globals_function from lib-graalpython/functions.py
154155
PythonObject globals = self.getGlobals();
155156
if (moduleGlobals.profile(globals instanceof PythonModule)) {
156-
PHashingCollection dict = lib.getDict(globals);
157+
PDict dict = lib.getDict(globals);
157158
if (moduleHasNoDict.profile(dict == null)) {
158159
dict = factory().createDictFixedStorage(globals);
159160
try {
@@ -245,7 +246,7 @@ Object getModule(PBuiltinFunction self, Object value) {
245246
@GenerateNodeFactory
246247
abstract static class DictNode extends PythonBinaryBuiltinNode {
247248
@Specialization(limit = "1")
248-
PNone dict(PFunction self, PHashingCollection mapping,
249+
PNone dict(PFunction self, PDict mapping,
249250
@CachedLibrary("self") PythonObjectLibrary lib) {
250251
try {
251252
lib.setDict(self, mapping);
@@ -259,7 +260,7 @@ PNone dict(PFunction self, PHashingCollection mapping,
259260
@Specialization(guards = "isNoValue(mapping)", limit = "1")
260261
Object dict(PFunction self, @SuppressWarnings("unused") PNone mapping,
261262
@CachedLibrary("self") PythonObjectLibrary lib) {
262-
PHashingCollection dict = lib.getDict(self);
263+
PDict dict = lib.getDict(self);
263264
if (dict == null) {
264265
dict = factory().createDictFixedStorage(self);
265266
try {
@@ -272,6 +273,11 @@ Object dict(PFunction self, @SuppressWarnings("unused") PNone mapping,
272273
return dict;
273274
}
274275

276+
@Specialization(guards = {"!isNoValue(mapping)", "!isDict(mapping)"})
277+
PNone dict(@SuppressWarnings("unused") PFunction self, Object mapping) {
278+
throw raise(TypeError, ErrorMessages.DICT_MUST_BE_SET_TO_DICT, mapping);
279+
}
280+
275281
@Specialization
276282
@SuppressWarnings("unused")
277283
Object builtinCode(PBuiltinFunction self, Object mapping) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/DecoratedMethodBuiltins.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,19 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.method;
4242

43+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
4344
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
44-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
4545
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FUNC__;
46+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
4647

4748
import java.util.List;
4849

4950
import com.oracle.graal.python.builtins.Builtin;
5051
import com.oracle.graal.python.builtins.CoreFunctions;
5152
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
52-
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
5353
import com.oracle.graal.python.builtins.PythonBuiltins;
5454
import com.oracle.graal.python.builtins.objects.PNone;
55-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
55+
import com.oracle.graal.python.builtins.objects.dict.PDict;
5656
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5757
import com.oracle.graal.python.nodes.ErrorMessages;
5858
import com.oracle.graal.python.nodes.PGuards;
@@ -104,7 +104,7 @@ public abstract static class DictNode extends PythonBinaryBuiltinNode {
104104
protected Object getDict(PDecoratedMethod self, @SuppressWarnings("unused") PNone mapping,
105105
@CachedLibrary("self") PythonObjectLibrary lib,
106106
@Cached PythonObjectFactory factory) {
107-
PHashingCollection dict = lib.getDict(self);
107+
PDict dict = lib.getDict(self);
108108
if (dict == null) {
109109
dict = factory.createDictFixedStorage(self);
110110
try {
@@ -118,7 +118,7 @@ protected Object getDict(PDecoratedMethod self, @SuppressWarnings("unused") PNon
118118
}
119119

120120
@Specialization(limit = "1")
121-
protected Object setDict(PDecoratedMethod self, PHashingCollection mapping,
121+
protected Object setDict(PDecoratedMethod self, PDict mapping,
122122
@CachedLibrary("self") PythonObjectLibrary lib) {
123123
try {
124124
lib.setDict(self, mapping);
@@ -129,9 +129,9 @@ protected Object setDict(PDecoratedMethod self, PHashingCollection mapping,
129129
return PNone.NONE;
130130
}
131131

132-
@Specialization(guards = "!isDict(value)")
133-
protected Object setDict(@SuppressWarnings("unused") PDecoratedMethod self, Object value) {
134-
throw raise(TypeError, ErrorMessages.MUST_BE_SET_TO_S_NOT_P, __DICT__, "dictionary", value);
132+
@Specialization(guards = {"!isNoValue(mapping)", "!isDict(mapping)"})
133+
protected Object setDict(@SuppressWarnings("unused") PDecoratedMethod self, Object mapping) {
134+
throw raise(TypeError, ErrorMessages.DICT_MUST_BE_SET_TO_DICT, mapping);
135135
}
136136
}
137137
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/module/ModuleBuiltins.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.module;
4242

43+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
44+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
4345
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DOC__;
4446
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__LOADER__;
4547
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
4648
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__PACKAGE__;
4749
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__SPEC__;
50+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DIR__;
51+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
4852
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTR__;
4953
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
5054
import static com.oracle.graal.python.runtime.exception.PythonErrorType.AttributeError;
@@ -65,9 +69,6 @@
6569
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins;
6670
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6771
import com.oracle.graal.python.nodes.ErrorMessages;
68-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
69-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DIR__;
70-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
7172
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
7273
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
7374
import com.oracle.graal.python.nodes.builtins.ListNodes;
@@ -166,7 +167,7 @@ Object dir(VirtualFrame frame, PythonModule self,
166167
}
167168

168169
private String getName(PythonModule self, PythonObjectLibrary pol, HashingStorageLibrary hashLib, CastToJavaStringNode castToJavaStringNode) {
169-
PHashingCollection dict = pol.getDict(self);
170+
PDict dict = pol.getDict(self);
170171
if (dict != null) {
171172
Object name = hashLib.getItem(dict.getDictStorage(), __NAME__);
172173
if (name != null) {
@@ -187,7 +188,7 @@ public abstract static class ModuleDictNode extends PythonBinaryBuiltinNode {
187188
@Specialization(guards = {"isNoValue(none)"}, limit = "1")
188189
Object dict(PythonModule self, @SuppressWarnings("unused") PNone none,
189190
@CachedLibrary("self") PythonObjectLibrary lib) {
190-
PHashingCollection dict = lib.getDict(self);
191+
PDict dict = lib.getDict(self);
191192
if (dict == null) {
192193
return PNone.NONE;
193194
}
@@ -209,13 +210,18 @@ Object dict(PythonModule self, PDict dict,
209210
@Specialization(guards = "isNoValue(none)", limit = "1")
210211
Object dict(PythonAbstractNativeObject self, @SuppressWarnings("unused") PNone none,
211212
@CachedLibrary("self") PythonObjectLibrary lib) {
212-
PHashingCollection dict = lib.getDict(self);
213+
PDict dict = lib.getDict(self);
213214
if (dict == null) {
214215
raise(self, none);
215216
}
216217
return dict;
217218
}
218219

220+
@Specialization(guards = {"!isNoValue(mapping)", "!isDict(mapping)"})
221+
Object dict(@SuppressWarnings("unused") Object self, Object mapping) {
222+
throw raise(TypeError, ErrorMessages.DICT_MUST_BE_SET_TO_DICT, mapping);
223+
}
224+
219225
@Fallback
220226
Object raise(Object self, @SuppressWarnings("unused") Object dict) {
221227
throw raise(PythonBuiltinClassType.TypeError, "descriptor '__dict__' for 'module' objects doesn't apply to a '%p' object", self);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/module/PythonModule.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333

3434
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
3535
import com.oracle.graal.python.builtins.objects.PNone;
36-
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
3736
import com.oracle.graal.python.builtins.objects.dict.PDict;
3837
import com.oracle.graal.python.builtins.objects.object.PythonObject;
3938
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
@@ -84,22 +83,22 @@ public String toString() {
8483
@ExportMessage
8584
static class GetDict {
8685
protected static boolean dictExists(Object dict) {
87-
return dict instanceof PHashingCollection;
86+
return dict instanceof PDict;
8887
}
8988

9089
@SuppressWarnings("unused")
9190
@Specialization(guards = {"self == cachedModule", "dictExists(dict)"}, assumptions = "singleContextAssumption()", limit = "1")
92-
static PHashingCollection getConstant(PythonModule self,
91+
static PDict getConstant(PythonModule self,
9392
@Cached(value = "self", weak = true) PythonModule cachedModule,
9493
@Cached(value = "self.getAttribute(DICT)", weak = true) Object dict) {
9594
// module.__dict__ is a read-only attribute
96-
return (PHashingCollection) dict;
95+
return (PDict) dict;
9796
}
9897

9998
@Specialization(replaces = "getConstant")
100-
static PHashingCollection getDict(PythonModule self,
99+
static PDict getDict(PythonModule self,
101100
@Shared("dylib") @CachedLibrary(limit = "4") DynamicObjectLibrary dylib) {
102-
return (PHashingCollection) dylib.getOrDefault(self, DICT, null);
101+
return (PDict) dylib.getOrDefault(self, DICT, null);
103102
}
104103
}
105104
}

0 commit comments

Comments
 (0)