Skip to content

Commit 0a87eb8

Browse files
authored
Merge PR #112: Replace InvokeOnCache with use of DSL, and remove unused file
2 parents 8520373 + 3812e9f commit 0a87eb8

File tree

3 files changed

+29
-150
lines changed

3 files changed

+29
-150
lines changed

src/trufflesom/interpreter/nodes/dispatch/GenericBlockDispatchNode.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/trufflesom/interpreter/nodes/dispatch/InvokeOnCache.java

Lines changed: 0 additions & 120 deletions
This file was deleted.

src/trufflesom/primitives/reflection/MethodPrims.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package trufflesom.primitives.reflection;
22

3+
import com.oracle.truffle.api.CallTarget;
4+
import com.oracle.truffle.api.Truffle;
5+
import com.oracle.truffle.api.dsl.Cached;
36
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
47
import com.oracle.truffle.api.dsl.NodeChild;
58
import com.oracle.truffle.api.dsl.Specialization;
69
import com.oracle.truffle.api.frame.VirtualFrame;
10+
import com.oracle.truffle.api.nodes.DirectCallNode;
11+
import com.oracle.truffle.api.nodes.IndirectCallNode;
712

813
import bd.primitives.Primitive;
914
import trufflesom.interpreter.nodes.ExpressionNode;
10-
import trufflesom.interpreter.nodes.dispatch.InvokeOnCache;
15+
import trufflesom.interpreter.nodes.dispatch.AbstractDispatchNode;
1116
import trufflesom.interpreter.nodes.nary.EagerlySpecializableNode;
1217
import trufflesom.interpreter.nodes.nary.UnaryExpressionNode;
1318
import trufflesom.primitives.arrays.ToArgumentsArrayNode;
@@ -51,22 +56,40 @@ public final SAbstractObject doSMethod(final SInvokable receiver) {
5156
executeWith = {"somArr", "target"})
5257
@Primitive(selector = "invokeOn:with:", extraChild = ToArgumentsArrayNodeFactory.class)
5358
public abstract static class InvokeOnPrim extends EagerlySpecializableNode {
54-
@Child private InvokeOnCache callNode = InvokeOnCache.create();
5559

5660
public abstract Object executeEvaluated(VirtualFrame frame, SInvokable receiver,
5761
Object target, SArray somArr);
5862

63+
public static DirectCallNode create(final CallTarget ct) {
64+
return Truffle.getRuntime().createDirectCallNode(ct);
65+
}
66+
67+
public static IndirectCallNode createIndirect() {
68+
return Truffle.getRuntime().createIndirectCallNode();
69+
}
70+
5971
@Override
6072
public final Object doPreEvaluated(final VirtualFrame frame,
6173
final Object[] args) {
6274
return executeEvaluated(frame, (SInvokable) args[0], args[1], (SArray) args[2]);
6375
}
6476

65-
@Specialization
66-
public final Object doInvoke(final VirtualFrame frame,
77+
@Specialization(guards = "receiver == cachedReceiver",
78+
limit = "" + AbstractDispatchNode.INLINE_CACHE_SIZE)
79+
public final Object doCached(
80+
final SInvokable receiver, final Object target, final SArray somArr,
81+
final Object[] argArr,
82+
@Cached("receiver") final SInvokable cachedReceiver,
83+
@Cached("create(receiver.getCallTarget())") final DirectCallNode callNode) {
84+
return callNode.call(argArr);
85+
}
86+
87+
@Specialization(replaces = "doCached")
88+
public final Object doUncached(
6789
final SInvokable receiver, final Object target, final SArray somArr,
68-
final Object[] argArr) {
69-
return callNode.executeDispatch(frame, receiver, argArr);
90+
final Object[] argArr,
91+
@Cached("createIndirect()") final IndirectCallNode callNode) {
92+
return callNode.call(receiver.getCallTarget(), argArr);
7093
}
7194
}
7295
}

0 commit comments

Comments
 (0)