Skip to content

Commit 5253618

Browse files
committed
use a single "empty object" shape instead of different ones for each class
1 parent 55e97cb commit 5253618

File tree

4 files changed

+15
-10
lines changed

4 files changed

+15
-10
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@
8080
import com.oracle.truffle.api.nodes.ExecutableNode;
8181
import com.oracle.truffle.api.nodes.Node;
8282
import com.oracle.truffle.api.nodes.RootNode;
83+
import com.oracle.truffle.api.object.Layout;
84+
import com.oracle.truffle.api.object.ObjectType;
85+
import com.oracle.truffle.api.object.Shape;
8386
import com.oracle.truffle.api.source.Source;
8487
import com.oracle.truffle.api.source.Source.SourceBuilder;
8588

@@ -103,6 +106,9 @@ public final class PythonLanguage extends TruffleLanguage<PythonContext> {
103106
private final NodeFactory nodeFactory;
104107
public final ConcurrentHashMap<Class<? extends PythonBuiltinBaseNode>, RootCallTarget> builtinCallTargetCache = new ConcurrentHashMap<>();
105108

109+
private static final Layout objectLayout = Layout.newLayout().build();
110+
private static final Shape freshShape = objectLayout.createShape(new ObjectType());
111+
106112
public PythonLanguage() {
107113
this.nodeFactory = NodeFactory.create(this);
108114
}
@@ -429,4 +435,8 @@ protected void initializeMultipleContexts() {
429435
public Object cacheCode(String filename, Supplier<PCode> createCode) {
430436
return cachedCode.computeIfAbsent(filename, f -> createCode.get());
431437
}
438+
439+
public static Shape freshShape() {
440+
return freshShape;
441+
}
432442
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import java.util.HashSet;
2929

30+
import com.oracle.graal.python.PythonLanguage;
3031
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
3132
import com.oracle.truffle.api.CompilerAsserts;
3233
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
@@ -169,7 +170,7 @@ public enum PythonBuiltinClassType implements LazyPythonClass {
169170
PythonBuiltinClassType(String name, String publicInModule) {
170171
this.name = name;
171172
this.publicInModule = publicInModule;
172-
this.instanceShape = com.oracle.graal.python.builtins.objects.type.PythonClass.freshShape();
173+
this.instanceShape = PythonLanguage.freshShape();
173174
}
174175

175176
PythonBuiltinClassType(String name) {

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.Set;
3838
import java.util.WeakHashMap;
3939

40+
import com.oracle.graal.python.PythonLanguage;
4041
import com.oracle.graal.python.builtins.objects.PNone;
4142
import com.oracle.graal.python.builtins.objects.cext.NativeWrappers.PythonClassNativeWrapper;
4243
import com.oracle.graal.python.builtins.objects.function.PFunction;
@@ -46,8 +47,6 @@
4647
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
4748
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
4849
import com.oracle.truffle.api.Truffle;
49-
import com.oracle.truffle.api.object.Layout;
50-
import com.oracle.truffle.api.object.ObjectType;
5150
import com.oracle.truffle.api.object.Shape;
5251
import com.oracle.truffle.api.utilities.CyclicAssumption;
5352

@@ -56,7 +55,6 @@
5655
*/
5756
public class PythonClass extends PythonObject implements LazyPythonClass {
5857

59-
private static final Layout objectLayout = Layout.newLayout().build();
6058
private final String className;
6159

6260
@CompilationFinal(dimensions = 1) private PythonClass[] baseClasses;
@@ -83,7 +81,7 @@ public final boolean isBuiltin() {
8381

8482
@TruffleBoundary
8583
public PythonClass(LazyPythonClass typeClass, String name, Shape instanceShape, PythonClass... baseClasses) {
86-
super(typeClass, freshShape() /* do not inherit layout from the TypeClass */);
84+
super(typeClass, PythonLanguage.freshShape() /* do not inherit layout from the TypeClass */);
8785
this.className = name;
8886

8987
if (baseClasses.length == 1 && baseClasses[0] == null) {
@@ -170,10 +168,6 @@ public void lookupChanged() {
170168
}
171169
}
172170

173-
public static Shape freshShape() {
174-
return objectLayout.createShape(new ObjectType());
175-
}
176-
177171
public Shape getInstanceShape() {
178172
return instanceShape;
179173
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ public PythonModule createPythonModule(PythonClass cls, String name) {
340340
}
341341

342342
public PythonClass createPythonClass(PythonClass metaclass, String name, PythonClass[] bases) {
343-
return trace(new PythonClass(metaclass, name, PythonClass.freshShape(), bases));
343+
return trace(new PythonClass(metaclass, name, PythonLanguage.freshShape(), bases));
344344
}
345345

346346
public PythonNativeClass createNativeClassWrapper(Object object, PythonClass metaClass, String name, PythonClass[] pythonClasses) {

0 commit comments

Comments
 (0)