Skip to content

Commit 01de4b4

Browse files
committed
use lazy classes in more places
1 parent e92dc94 commit 01de4b4

File tree

10 files changed

+39
-45
lines changed

10 files changed

+39
-45
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@
8686
import com.oracle.graal.python.builtins.objects.str.PString;
8787
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
8888
import com.oracle.graal.python.builtins.objects.type.PythonClass;
89-
import com.oracle.graal.python.nodes.PNodeWithContext;
9089
import com.oracle.graal.python.nodes.PGuards;
90+
import com.oracle.graal.python.nodes.PNodeWithContext;
9191
import com.oracle.graal.python.nodes.SpecialAttributeNames;
9292
import com.oracle.graal.python.nodes.SpecialMethodNames;
9393
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
@@ -98,6 +98,7 @@
9898
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
9999
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
100100
import com.oracle.graal.python.nodes.object.GetClassNode;
101+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
101102
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
102103
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
103104
import com.oracle.graal.python.runtime.PythonContext;
@@ -547,7 +548,7 @@ protected static boolean isPyDateTimeCAPI(PythonObject object) {
547548

548549
@Specialization(guards = "isPyDateTimeCAPI(object)")
549550
Object doDatetimeCAPI(PythonObject object, String key,
550-
@Cached("create()") GetClassNode getClass,
551+
@Cached("create()") GetLazyClassNode getClass,
551552
@Cached("create()") LookupAttributeInMRONode.Dynamic getAttrNode) {
552553
return getToSulongNode().execute(getAttrNode.execute(getClass.execute(object), key));
553554
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/FloatBuiltins.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,15 @@
7272
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.FromNativeSubclassNode;
7373
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
7474
import com.oracle.graal.python.builtins.objects.ints.PInt;
75+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
7576
import com.oracle.graal.python.builtins.objects.type.PythonClass;
7677
import com.oracle.graal.python.nodes.call.special.LookupAndCallVarargsNode;
7778
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7879
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
7980
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
8081
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
8182
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
82-
import com.oracle.graal.python.nodes.object.GetClassNode;
83+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
8384
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
8485
import com.oracle.graal.python.runtime.exception.PythonErrorType;
8586
import com.oracle.graal.python.runtime.formatting.FloatFormatter;
@@ -1072,12 +1073,12 @@ abstract static class NegNode extends PythonUnaryBuiltinNode {
10721073
@Builtin(name = "real", fixedNumOfPositionalArgs = 1, isGetter = true, doc = "the real part of a complex number")
10731074
static abstract class RealNode extends PythonBuiltinNode {
10741075

1075-
@Child private GetClassNode getClassNode;
1076+
@Child private GetLazyClassNode getClassNode;
10761077

1077-
protected PythonClass getClass(Object value) {
1078+
protected LazyPythonClass getClass(Object value) {
10781079
if (getClassNode == null) {
10791080
CompilerDirectives.transferToInterpreterAndInvalidate();
1080-
getClassNode = insert(GetClassNode.create());
1081+
getClassNode = insert(GetLazyClassNode.create());
10811082
}
10821083
return getClassNode.execute(value);
10831084
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.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.FromNativeSubclassNode;
5757
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
5858
import com.oracle.graal.python.builtins.objects.cext.PythonNativeVoidPtr;
59-
import com.oracle.graal.python.builtins.objects.type.PythonClass;
59+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
6060
import com.oracle.graal.python.nodes.SpecialMethodNames;
6161
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
6262
import com.oracle.graal.python.nodes.call.special.LookupAndCallTernaryNode;
@@ -65,7 +65,7 @@
6565
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
6666
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
6767
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
68-
import com.oracle.graal.python.nodes.object.GetClassNode;
68+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
6969
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
7070
import com.oracle.graal.python.runtime.exception.PythonErrorType;
7171
import com.oracle.truffle.api.CompilerDirectives;
@@ -1774,12 +1774,12 @@ static abstract class TruncNode extends IntNode {
17741774
@GenerateNodeFactory
17751775
@TypeSystemReference(PythonArithmeticTypes.class)
17761776
abstract static class IntNode extends PythonBuiltinNode {
1777-
@Child private GetClassNode getClassNode;
1777+
@Child private GetLazyClassNode getClassNode;
17781778

1779-
protected PythonClass getClass(Object value) {
1779+
protected LazyPythonClass getClass(Object value) {
17801780
if (getClassNode == null) {
17811781
CompilerDirectives.transferToInterpreterAndInvalidate();
1782-
getClassNode = insert(GetClassNode.create());
1782+
getClassNode = insert(GetLazyClassNode.create());
17831783
}
17841784
return getClassNode.execute(value);
17851785
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,13 @@ Object getattr(Object object, Object key) {
370370
public abstract static class SetattrNode extends PythonTernaryBuiltinNode {
371371
@Specialization
372372
protected PNone doIt(Object object, Object key, Object value,
373-
@Cached("create()") GetClassNode getObjectClassNode,
373+
@Cached("create()") GetLazyClassNode getObjectClassNode,
374374
@Cached("create()") LookupAttributeInMRONode.Dynamic getExisting,
375375
@Cached("create()") GetClassNode getDataClassNode,
376376
@Cached("create(__SET__)") LookupAttributeInMRONode lookupSetNode,
377377
@Cached("create()") CallTernaryMethodNode callSetNode,
378378
@Cached("create()") WriteAttributeToObjectNode writeNode) {
379-
PythonClass type = getObjectClassNode.execute(object);
379+
LazyPythonClass type = getObjectClassNode.execute(object);
380380
Object descr = getExisting.execute(type, key);
381381
if (descr != PNone.NO_VALUE) {
382382
PythonClass dataDescClass = getDataClassNode.execute(descr);
@@ -402,14 +402,14 @@ protected PNone doIt(Object object, Object key, Object value,
402402
public abstract static class DelattrNode extends PythonBinaryBuiltinNode {
403403
@Specialization
404404
protected PNone doIt(Object object, Object key,
405-
@Cached("create()") GetClassNode getObjectClassNode,
405+
@Cached("create()") GetLazyClassNode getObjectClassNode,
406406
@Cached("create()") LookupAttributeInMRONode.Dynamic getExisting,
407407
@Cached("create()") GetClassNode getDataClassNode,
408408
@Cached("create(__DELETE__)") LookupAttributeInMRONode lookupDeleteNode,
409409
@Cached("create()") CallBinaryMethodNode callSetNode,
410410
@Cached("create()") ReadAttributeFromObjectNode attrRead,
411411
@Cached("create()") WriteAttributeToObjectNode writeNode) {
412-
PythonClass type = getObjectClassNode.execute(object);
412+
LazyPythonClass type = getObjectClassNode.execute(object);
413413
Object descr = getExisting.execute(type, key);
414414
if (descr != PNone.NO_VALUE) {
415415
PythonClass dataDescClass = getDataClassNode.execute(descr);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
8585
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
8686
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
87-
import com.oracle.graal.python.nodes.object.GetClassNode;
8887
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
8988
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
9089
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
@@ -657,17 +656,10 @@ protected int findWithBounds(String self, String str, int start, int end) {
657656
@GenerateNodeFactory
658657
public abstract static class JoinNode extends PythonBuiltinNode {
659658

660-
@Child private JoinInternalNode joinInternalNode;
661-
@Child private GetClassNode getClassNode;
662-
663659
@Specialization
664-
protected String join(Object self, Object iterable) {
665-
if (joinInternalNode == null || getClassNode == null) {
666-
CompilerDirectives.transferToInterpreterAndInvalidate();
667-
joinInternalNode = insert(JoinInternalNode.create());
668-
getClassNode = insert(GetClassNode.create());
669-
}
670-
return joinInternalNode.execute(self, iterable, getClassNode.execute(iterable));
660+
protected String join(Object self, Object iterable,
661+
@Cached("create()") JoinInternalNode join) {
662+
return join.execute(self, iterable);
671663
}
672664
}
673665

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242

4343
import com.oracle.graal.python.builtins.objects.PNone;
4444
import com.oracle.graal.python.nodes.PNodeWithContext;
45-
import com.oracle.graal.python.nodes.object.GetClassNode;
45+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
4646
import com.oracle.truffle.api.nodes.NodeCost;
4747

4848
public final class LookupInheritedAttributeNode extends PNodeWithContext {
4949

50-
@Child private GetClassNode getClassNode = GetClassNode.create();
50+
@Child private GetLazyClassNode getClassNode = GetLazyClassNode.create();
5151
@Child private LookupAttributeInMRONode lookupInMRONode;
5252

5353
private LookupInheritedAttributeNode(String key) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/builtins/JoinInternalNode.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
4444

4545
import com.oracle.graal.python.builtins.objects.object.PythonObject;
46-
import com.oracle.graal.python.builtins.objects.type.PythonClass;
4746
import com.oracle.graal.python.nodes.PGuards;
4847
import com.oracle.graal.python.nodes.PNodeWithContext;
4948
import com.oracle.graal.python.nodes.control.GetIteratorNode;
@@ -62,11 +61,11 @@
6261
@TypeSystemReference(PythonArithmeticTypes.class)
6362
public abstract class JoinInternalNode extends PNodeWithContext {
6463

65-
public abstract String execute(Object self, Object iterable, PythonClass iterableClass);
64+
public abstract String execute(Object self, Object iterable);
6665

6766
@Specialization
6867
@TruffleBoundary
69-
protected String join(String string, String arg, @SuppressWarnings("unused") PythonClass iterableClass) {
68+
protected String join(String string, String arg) {
7069
if (arg.isEmpty()) {
7170
return "";
7271
}
@@ -92,7 +91,7 @@ private String checkItem(Object item, int pos) {
9291

9392
@Specialization
9493
@TruffleBoundary
95-
protected String join(String string, PythonObject iterable, @SuppressWarnings("unused") PythonClass iterableClass,
94+
protected String join(String string, PythonObject iterable,
9695
@Cached("create()") GetIteratorNode getIterator,
9796
@Cached("create()") GetNextNode next,
9897
@Cached("create()") IsBuiltinClassProfile errorProfile1,
@@ -122,7 +121,7 @@ protected String join(String string, PythonObject iterable, @SuppressWarnings("u
122121

123122
@Fallback
124123
@SuppressWarnings("unused")
125-
protected String join(Object self, Object arg, PythonClass iterableClass) {
124+
protected String join(Object self, Object arg) {
126125
throw raise(TypeError, "can only join an iterable");
127126
}
128127

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/builtins/TupleNodes.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,14 @@
4646
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4747
import com.oracle.graal.python.builtins.objects.PNone;
4848
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
49+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
4950
import com.oracle.graal.python.builtins.objects.type.PythonClass;
5051
import com.oracle.graal.python.nodes.PGuards;
5152
import com.oracle.graal.python.nodes.PNodeWithContext;
5253
import com.oracle.graal.python.nodes.SpecialMethodNames;
5354
import com.oracle.graal.python.nodes.control.GetIteratorNode;
5455
import com.oracle.graal.python.nodes.control.GetNextNode;
55-
import com.oracle.graal.python.nodes.object.GetClassNode;
56+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
5657
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
5758
import com.oracle.graal.python.runtime.exception.PException;
5859
import com.oracle.truffle.api.CompilerDirectives;
@@ -68,12 +69,12 @@ public abstract class TupleNodes {
6869
@ImportStatic({PGuards.class, SpecialMethodNames.class})
6970
public abstract static class ConstructTupleNode extends PNodeWithContext {
7071

71-
@Child private GetClassNode getClassNode;
72+
@Child private GetLazyClassNode getClassNode;
7273

73-
protected PythonClass getClass(Object value) {
74+
protected LazyPythonClass getClass(Object value) {
7475
if (getClassNode == null) {
7576
CompilerDirectives.transferToInterpreterAndInvalidate();
76-
getClassNode = insert(GetClassNode.create());
77+
getClassNode = insert(GetLazyClassNode.create());
7778
}
7879
return getClassNode.execute(value);
7980
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/LookupAndCallVarargsNode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
import com.oracle.graal.python.builtins.objects.function.PKeyword;
4444
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
45-
import com.oracle.graal.python.nodes.object.GetClassNode;
45+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
4646
import com.oracle.truffle.api.dsl.Cached;
4747
import com.oracle.truffle.api.dsl.Specialization;
4848
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -64,7 +64,7 @@ public static LookupAndCallVarargsNode create(String name) {
6464

6565
@Specialization
6666
Object callObject(VirtualFrame frame, Object callable, Object[] arguments,
67-
@Cached("create()") GetClassNode getClassNode,
67+
@Cached("create()") GetLazyClassNode getClassNode,
6868
@Cached("create()") LookupAttributeInMRONode.Dynamic getattr) {
6969
return dispatchNode.execute(frame, getattr.execute(getClassNode.execute(callable), name), arguments, PKeyword.EMPTY_KEYWORDS);
7070
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/control/GetIteratorNode.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import com.oracle.graal.python.builtins.objects.iterator.PBuiltinIterator;
3232
import com.oracle.graal.python.builtins.objects.iterator.PZip;
3333
import com.oracle.graal.python.builtins.objects.object.PythonObject;
34-
import com.oracle.graal.python.builtins.objects.type.PythonClass;
34+
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
3535
import com.oracle.graal.python.nodes.PGuards;
3636
import com.oracle.graal.python.nodes.SpecialMethodNames;
3737
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
@@ -40,7 +40,7 @@
4040
import com.oracle.graal.python.nodes.control.GetIteratorNodeGen.IsIteratorObjectNodeGen;
4141
import com.oracle.graal.python.nodes.expression.ExpressionNode;
4242
import com.oracle.graal.python.nodes.expression.UnaryOpNode;
43-
import com.oracle.graal.python.nodes.object.GetClassNode;
43+
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
4444
import com.oracle.graal.python.runtime.exception.PException;
4545
import com.oracle.truffle.api.CompilerDirectives;
4646
import com.oracle.truffle.api.dsl.Cached;
@@ -60,12 +60,12 @@ public static GetIteratorNode create(ExpressionNode collection) {
6060
return GetIteratorNodeGen.create(collection);
6161
}
6262

63-
@Child private GetClassNode getClassNode;
63+
@Child private GetLazyClassNode getClassNode;
6464

65-
private PythonClass getClass(Object value) {
65+
private LazyPythonClass getClass(Object value) {
6666
if (getClassNode == null) {
6767
CompilerDirectives.transferToInterpreterAndInvalidate();
68-
getClassNode = insert(GetClassNode.create());
68+
getClassNode = insert(GetLazyClassNode.create());
6969
}
7070
return getClassNode.execute(value);
7171
}
@@ -92,7 +92,7 @@ public Object doGeneric(Object value,
9292
@Cached("create(__GETITEM__)") LookupAttributeInMRONode lookupGetitemAttrMroNode,
9393
@Cached("create()") CallUnaryMethodNode dispatchGetattribute,
9494
@Cached("create()") IsIteratorObjectNode isIteratorObjectNode) {
95-
PythonClass clazz = getClass(value);
95+
LazyPythonClass clazz = getClass(value);
9696
Object attrObj = getattributeProfile.profile(lookupAttrMroNode.execute(clazz));
9797
if (attrObj != PNone.NO_VALUE && attrObj != PNone.NONE) {
9898
Object iterObj = dispatchGetattribute.executeObject(attrObj, value);

0 commit comments

Comments
 (0)