Skip to content

Commit 7cfd8f6

Browse files
committed
Merge branch 'master' into mq/GR-57401_1
2 parents cac7b0c + 45cdf9c commit 7cfd8f6

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.SetItemDynamicNodeGen;
7171
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.SetItemNodeGen;
7272
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.StorageToNativeNodeGen;
73+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.ToArrayNodeGen;
7374
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.ToByteArrayNodeGen;
7475
import com.oracle.graal.python.builtins.objects.floats.PFloat;
7576
import com.oracle.graal.python.builtins.objects.ints.PInt;
@@ -3933,6 +3934,10 @@ protected static boolean isMroStorage(SequenceStorage storage) {
39333934
public abstract static class ToArrayNode extends Node {
39343935
public abstract Object[] execute(Node inliningTarget, SequenceStorage s);
39353936

3937+
public static Object[] executeUncached(SequenceStorage s) {
3938+
return ToArrayNodeGen.getUncached().execute(null, s);
3939+
}
3940+
39363941
@Specialization
39373942
static Object[] doObjectSequenceStorage(Node inliningTarget, ObjectSequenceStorage s,
39383943
@Cached InlinedConditionProfile profile) {

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUBCLASSHOOK__;
4949
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_JOIN;
5050
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_SORT;
51-
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_UPDATE;
5251
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___LEN__;
5352
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___REDUCE__;
5453
import static com.oracle.graal.python.nodes.StringLiterals.T_NONE;
@@ -89,6 +88,7 @@
8988
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltinsFactory.DictNodeFactory;
9089
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltinsFactory.GetAttributeNodeFactory;
9190
import com.oracle.graal.python.builtins.objects.set.PSet;
91+
import com.oracle.graal.python.builtins.objects.set.SetBuiltins;
9292
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
9393
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
9494
import com.oracle.graal.python.builtins.objects.type.TpSlots;
@@ -142,6 +142,8 @@
142142
import com.oracle.graal.python.nodes.object.SetDictNode;
143143
import com.oracle.graal.python.nodes.util.CannotCastException;
144144
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
145+
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCallContext;
146+
import com.oracle.graal.python.runtime.IndirectCallData;
145147
import com.oracle.graal.python.runtime.exception.PException;
146148
import com.oracle.graal.python.runtime.object.PFactory;
147149
import com.oracle.truffle.api.CompilerAsserts;
@@ -889,22 +891,26 @@ public abstract static class DirNode extends PythonBuiltinNode {
889891
@Specialization
890892
static Object dir(VirtualFrame frame, Object obj,
891893
@Bind("this") Node inliningTarget,
894+
@Cached("createFor(this)") IndirectCallData indirectCallData,
895+
@Cached SetBuiltins.UpdateSingleNode updateSetNode,
892896
@Cached PyObjectLookupAttr lookupAttrNode,
893-
@Cached CallNode callNode,
894897
@Cached GetClassNode getClassNode,
895898
@Cached IsSubtypeNode isSubtypeNode,
896-
@Cached com.oracle.graal.python.builtins.objects.type.TypeBuiltins.DirNode dirNode,
897899
@Cached ConstructListNode constructListNode,
898900
@Bind PythonLanguage language) {
899901
PSet names = PFactory.createSet(language);
900-
Object updateCallable = lookupAttrNode.execute(frame, inliningTarget, names, T_UPDATE);
901902
Object ns = lookupAttrNode.execute(frame, inliningTarget, obj, T___DICT__);
902903
if (isSubtypeNode.execute(getClassNode.execute(inliningTarget, ns), PythonBuiltinClassType.PDict)) {
903-
callNode.execute(frame, updateCallable, ns);
904+
updateSetNode.execute(frame, names, ns);
904905
}
905906
Object klass = lookupAttrNode.execute(frame, inliningTarget, obj, T___CLASS__);
906907
if (klass != PNone.NO_VALUE) {
907-
callNode.execute(frame, updateCallable, dirNode.execute(frame, klass));
908+
Object state = IndirectCallContext.enter(frame, indirectCallData);
909+
try {
910+
com.oracle.graal.python.builtins.objects.type.TypeBuiltins.DirNode.dir(names, klass);
911+
} finally {
912+
IndirectCallContext.exit(frame, indirectCallData, state);
913+
}
908914
}
909915
return constructListNode.execute(frame, names);
910916
}

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

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUBCLASSES__;
6666
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUBCLASSHOOK__;
6767
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_MRO;
68-
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_UPDATE;
6968
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___MRO_ENTRIES__;
7069
import static com.oracle.graal.python.runtime.exception.PythonErrorType.AttributeError;
7170
import static com.oracle.graal.python.runtime.exception.PythonErrorType.NotImplementedError;
@@ -102,6 +101,7 @@
102101
import com.oracle.graal.python.builtins.objects.list.PList;
103102
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
104103
import com.oracle.graal.python.builtins.objects.set.PSet;
104+
import com.oracle.graal.python.builtins.objects.set.SetBuiltins.UpdateSingleNode;
105105
import com.oracle.graal.python.builtins.objects.str.PString;
106106
import com.oracle.graal.python.builtins.objects.str.StringUtils.SimpleTruffleStringFormatNode;
107107
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
@@ -151,6 +151,8 @@
151151
import com.oracle.graal.python.nodes.object.GetDictIfExistsNode;
152152
import com.oracle.graal.python.nodes.util.CannotCastException;
153153
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
154+
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCallContext;
155+
import com.oracle.graal.python.runtime.IndirectCallData;
154156
import com.oracle.graal.python.runtime.PythonContext;
155157
import com.oracle.graal.python.runtime.exception.PException;
156158
import com.oracle.graal.python.runtime.exception.PythonErrorType;
@@ -1204,34 +1206,34 @@ public abstract static class DirNode extends PythonUnaryBuiltinNode {
12041206

12051207
@Specialization
12061208
static PList dir(VirtualFrame frame, Object klass,
1207-
@Bind("this") Node inliningTarget,
1208-
@Cached PyObjectLookupAttr lookupAttrNode,
1209-
@Cached com.oracle.graal.python.nodes.call.CallNode callNode,
1210-
@Cached ToArrayNode toArrayNode,
1211-
@Cached("createGetAttrNode()") GetFixedAttributeNode getBasesNode,
1212-
@Cached ConstructListNode constructListNode) {
1213-
return constructListNode.execute(frame, dir(frame, inliningTarget, klass, lookupAttrNode, callNode, getBasesNode, toArrayNode));
1209+
@Cached ConstructListNode constructListNode,
1210+
@Cached("createFor(this)") IndirectCallData indirectCallData) {
1211+
PSet names = PFactory.createSet(PythonLanguage.get(inliningTarget));
1212+
Object state = IndirectCallContext.enter(frame, indirectCallData);
1213+
try {
1214+
dir(names, klass);
1215+
} finally {
1216+
IndirectCallContext.exit(frame, indirectCallData, state);
1217+
}
1218+
return return constructListNode.execute(frame, names);
12141219
}
12151220

1216-
private static PSet dir(VirtualFrame frame, Node inliningTarget, Object klass, PyObjectLookupAttr lookupAttrNode, com.oracle.graal.python.nodes.call.CallNode callNode,
1217-
GetFixedAttributeNode getBasesNode, ToArrayNode toArrayNode) {
1218-
PSet names = PFactory.createSet(PythonLanguage.get(inliningTarget));
1219-
Object updateCallable = lookupAttrNode.execute(frame, inliningTarget, names, T_UPDATE);
1220-
Object ns = lookupAttrNode.execute(frame, inliningTarget, klass, T___DICT__);
1221+
@TruffleBoundary
1222+
public static void dir(PSet names, Object klass) {
1223+
Object ns = PyObjectLookupAttr.executeUncached(klass, T___DICT__);
1224+
UpdateSingleNode updateSingleNode = UpdateSingleNode.getUncached();
12211225
if (ns != NO_VALUE) {
1222-
callNode.execute(frame, updateCallable, ns);
1226+
updateSingleNode.execute(null, names, ns);
12231227
}
1224-
Object basesAttr = getBasesNode.execute(frame, klass);
1228+
Object basesAttr = PyObjectLookupAttr.executeUncached(klass, T___BASES__);
12251229
if (basesAttr instanceof PTuple) {
1226-
Object[] bases = toArrayNode.execute(inliningTarget, ((PTuple) basesAttr).getSequenceStorage());
1230+
Object[] bases = ToArrayNode.executeUncached(((PTuple) basesAttr).getSequenceStorage());
12271231
for (Object cls : bases) {
12281232
// Note that since we are only interested in the keys, the order
12291233
// we merge classes is unimportant
1230-
Object baseNames = dir(frame, inliningTarget, cls, lookupAttrNode, callNode, getBasesNode, toArrayNode);
1231-
callNode.execute(frame, updateCallable, baseNames);
1234+
dir(names, cls);
12321235
}
12331236
}
1234-
return names;
12351237
}
12361238

12371239
@NeverDefault

0 commit comments

Comments
 (0)