Skip to content

Commit 3d5c9e1

Browse files
committed
implement getLazyPythonClass for direct subclasses of PythonAbstractObject
1 parent 1e36636 commit 3d5c9e1

File tree

8 files changed

+61
-8
lines changed

8 files changed

+61
-8
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PEllipsis.java

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

43+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
44+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
45+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
4346
import com.oracle.truffle.api.CompilerAsserts;
47+
import com.oracle.truffle.api.library.ExportLibrary;
48+
import com.oracle.truffle.api.library.ExportMessage;
4449

50+
@ExportLibrary(PythonObjectLibrary.class)
4551
public final class PEllipsis extends PythonAbstractObject {
4652

4753
public static final PEllipsis INSTANCE = new PEllipsis();
@@ -59,4 +65,10 @@ public String toString() {
5965
public int compareTo(Object o) {
6066
return this.hashCode() - o.hashCode();
6167
}
68+
69+
@ExportMessage
70+
@SuppressWarnings("static-method")
71+
public LazyPythonClass getLazyPythonClass() {
72+
return PythonBuiltinClassType.PEllipsis;
73+
}
6274
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PNone.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,16 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects;
2727

28+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
29+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
30+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
2831
import com.oracle.truffle.api.CompilerAsserts;
2932
import com.oracle.truffle.api.interop.InteropLibrary;
3033
import com.oracle.truffle.api.library.ExportLibrary;
3134
import com.oracle.truffle.api.library.ExportMessage;
3235

3336
@ExportLibrary(InteropLibrary.class)
37+
@ExportLibrary(PythonObjectLibrary.class)
3438
public final class PNone extends PythonAbstractObject {
3539

3640
public static final PNone NONE = new PNone();
@@ -54,4 +58,10 @@ public int compareTo(Object o) {
5458
static boolean isNull(@SuppressWarnings("unused") PNone self) {
5559
return true;
5660
}
61+
62+
@ExportMessage
63+
@SuppressWarnings("static-method")
64+
public LazyPythonClass getLazyPythonClass() {
65+
return PythonBuiltinClassType.PNone;
66+
}
5767
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PNotImplemented.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects;
2727

28+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
29+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
30+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
2831
import com.oracle.truffle.api.CompilerAsserts;
32+
import com.oracle.truffle.api.library.ExportLibrary;
33+
import com.oracle.truffle.api.library.ExportMessage;
2934

35+
@ExportLibrary(PythonObjectLibrary.class)
3036
public final class PNotImplemented extends PythonAbstractObject {
3137

3238
public static final PNotImplemented NOT_IMPLEMENTED = new PNotImplemented();
@@ -43,4 +49,10 @@ public String toString() {
4349
public int compareTo(Object o) {
4450
return this.hashCode() - o.hashCode();
4551
}
52+
53+
@ExportMessage
54+
@SuppressWarnings("static-method")
55+
public LazyPythonClass getLazyPythonClass() {
56+
return PythonBuiltinClassType.PNotImplemented;
57+
}
4658
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cell/PCell.java

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

43+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4344
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
45+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
46+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
4447
import com.oracle.truffle.api.Assumption;
4548
import com.oracle.truffle.api.CompilerAsserts;
4649
import com.oracle.truffle.api.CompilerDirectives;
50+
import com.oracle.truffle.api.library.ExportLibrary;
51+
import com.oracle.truffle.api.library.ExportMessage;
4752

53+
@ExportLibrary(PythonObjectLibrary.class)
4854
public final class PCell extends PythonAbstractObject {
4955
private final Assumption effectivelyFinal;
5056
private Object ref;
@@ -101,4 +107,10 @@ public int compareTo(Object o) {
101107
CompilerDirectives.transferToInterpreter();
102108
throw new UnsupportedOperationException();
103109
}
110+
111+
@ExportMessage
112+
@SuppressWarnings("static-method")
113+
public LazyPythonClass getLazyPythonClass() {
114+
return PythonBuiltinClassType.PCell;
115+
}
104116
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,17 @@ public boolean hasDict() {
146146
return true;
147147
}
148148

149+
@ExportMessage
150+
@SuppressWarnings({"static-method", "unused"})
151+
public void setDict(PHashingCollection value) throws UnsupportedMessageException {
152+
throw UnsupportedMessageException.create();
153+
}
154+
149155
@ExportMessage
150156
@GenerateUncached
151157
public static abstract class GetDict {
152158
@Specialization
153-
public PHashingCollection getNativeDictionary(Object self,
159+
public static PHashingCollection getNativeDictionary(PythonAbstractNativeObject self,
154160
@Cached PRaiseNode raiseNode,
155161
@Exclusive @Cached ToSulongNode toSulong,
156162
@Exclusive @Cached ToJavaNode toJava,
@@ -184,7 +190,7 @@ public static Assumption getSingleContextAssumption() {
184190
@Specialization(guards = "object == cachedObject", limit = "1", assumptions = "singleContextAssumption")
185191
public static PythonAbstractClass getNativeClassCachedIdentity(PythonAbstractNativeObject object,
186192
@Shared("assumption") @Cached(value = "getSingleContextAssumption()") Assumption singleContextAssumption,
187-
@Exclusive @Cached("object") PythonNativeObject cachedObject,
193+
@Exclusive @Cached("object") PythonAbstractNativeObject cachedObject,
188194
@Exclusive @Cached("getNativeClassUncached(cachedObject)") PythonAbstractClass cachedClass) {
189195
// TODO: (tfel) is this really something we can do? It's so rare for this class to
190196
// change that it shouldn't be worth the effort, but in native code, anything can
@@ -196,7 +202,7 @@ public static PythonAbstractClass getNativeClassCachedIdentity(PythonAbstractNat
196202
@Specialization(guards = "cachedObject.equals(object)", limit = "1", assumptions = "singleContextAssumption")
197203
public static PythonAbstractClass getNativeClassCached(PythonAbstractNativeObject object,
198204
@Shared("assumption") @Cached(value = "getSingleContextAssumption()") Assumption singleContextAssumption,
199-
@Exclusive @Cached("object") PythonNativeObject cachedObject,
205+
@Exclusive @Cached("object") PythonAbstractNativeObject cachedObject,
200206
@Exclusive @Cached("getNativeClassUncached(cachedObject)") PythonAbstractClass cachedClass) {
201207
// TODO same as for 'getNativeClassCachedIdentity'
202208
return cachedClass;
@@ -211,7 +217,6 @@ public static PythonAbstractClass getNativeClass(PythonAbstractNativeObject obje
211217
return (PythonAbstractClass) toJavaNode.execute(callGetObTypeNode.call(FUN_GET_OB_TYPE, object.getPtr()));
212218
}
213219

214-
@Specialization(replaces = "getNativeClass")
215220
public static PythonAbstractClass getNativeClassUncached(PythonAbstractNativeObject object) {
216221
// do not convert wrap 'object.object' since that is really the native pointer
217222
// object

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/PythonObject.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
3838
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
3939
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
40-
import com.oracle.graal.python.nodes.PRaiseNode;
4140
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
4241
import com.oracle.truffle.api.Assumption;
4342
import com.oracle.truffle.api.CompilerAsserts;
@@ -55,7 +54,6 @@
5554
import com.oracle.truffle.api.object.Property;
5655
import com.oracle.truffle.api.object.Shape;
5756
import com.oracle.truffle.api.object.dsl.Layout;
58-
import com.oracle.truffle.api.profiles.BranchProfile;
5957

6058
@ExportLibrary(PythonObjectLibrary.class)
6159
public class PythonObject extends PythonAbstractObject {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/PythonObjectLibrary.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.object;
4242

43+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4344
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
4445
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
4546
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
47+
import com.oracle.graal.python.nodes.PRaiseNode;
4648
import com.oracle.truffle.api.interop.UnsupportedMessageException;
4749
import com.oracle.truffle.api.library.GenerateLibrary;
4850
import com.oracle.truffle.api.library.GenerateLibrary.Abstract;
@@ -68,7 +70,9 @@ public void setDict(PythonAbstractObject receiver, PHashingCollection dict) thro
6870

6971
public abstract LazyPythonClass getLazyPythonClass(PythonAbstractObject receiver);
7072

71-
public abstract void setLazyPythonClass(PythonAbstractObject receiver, LazyPythonClass cls);
73+
public void setLazyPythonClass(PythonAbstractObject receiver, LazyPythonClass cls) {
74+
PRaiseNode.getUncached().raise(PythonBuiltinClassType.TypeError, "__class__ assignment only supported for heap types or ModuleType subclasses, not '%p'", receiver);
75+
}
7276

7377
static final LibraryFactory<PythonObjectLibrary> FACTORY = LibraryFactory.resolve(PythonObjectLibrary.class);
7478

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/ReadAttributeFromObjectNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ protected Object readFromBuiltinModuleDict(@SuppressWarnings("unused") PythonMod
127127
@SuppressWarnings("unused") @Cached IsBuiltinClassProfile isBuiltinDict,
128128
@SuppressWarnings("unused") @Cached IsBuiltinClassProfile isBuiltinMappingproxy,
129129
@Cached HashingStorageNodes.GetItemNode getItemNode) {
130-
return readDirectlyFromBuiltinDict((PHashingCollection) cachedDict, key, getDictStorage, getItemNode);
130+
return readDirectlyFromBuiltinDict(cachedDict, key, getDictStorage, getItemNode);
131131
}
132132

133133
// read from a builtin dict

0 commit comments

Comments
 (0)