# HG changeset patch # User Thomas Wuerthinger # Date 1397561186 -7200 # Node ID 2ed720ce9273ef316d82ea94a4819b4869ac5f1c # Parent 083e9e4df58a028ea30ec00b9a076c27317b9a2d Truffle: Change CallTarget from an abstract class to an interface. Allow varargs. diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java Tue Apr 15 13:26:26 2014 +0200 @@ -58,7 +58,7 @@ @CompilerDirectives.SlowPath @Override - public Object call(Object[] args) { + public Object call(Object... args) { return CompilerDirectives.inInterpreter() ? callHelper(args) : executeHelper(args); } diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Tue Apr 15 13:26:26 2014 +0200 @@ -33,13 +33,12 @@ import com.oracle.graal.debug.*; import com.oracle.truffle.api.*; import com.oracle.truffle.api.frame.*; -import com.oracle.truffle.api.impl.*; import com.oracle.truffle.api.nodes.*; /** * Call target that is optimized by Graal upon surpassing a specific invocation threshold. */ -public abstract class OptimizedCallTarget extends DefaultCallTarget implements LoopCountReceiver, ReplaceObserver { +public abstract class OptimizedCallTarget extends RootCallTarget implements LoopCountReceiver, ReplaceObserver { protected static final PrintStream OUT = TTY.out().out(); @@ -99,7 +98,7 @@ } @Override - public abstract Object call(Object[] args); + public abstract Object call(Object... args); public abstract InstalledCode compile(); diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/RootNodeTest.java --- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/RootNodeTest.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/RootNodeTest.java Tue Apr 15 13:26:26 2014 +0200 @@ -30,7 +30,7 @@ /** *

Creating a Root Node

- * + * *

* A Truffle root node is the entry point into a Truffle tree that represents a guest language * method. It contains a {@link RootNode#execute(VirtualFrame)} method that can return a @@ -38,9 +38,9 @@ * must however never be called directly. Instead, the Truffle runtime must be used to create a * {@link CallTarget} object from a root node using the * {@link TruffleRuntime#createCallTarget(RootNode)} method. This call target object can then be - * executed using the {@link CallTarget#call()} method or one of its overloads. + * executed using the {@link CallTarget#call(Object...)} method or one of its overloads. *

- * + * *

* The next part of the Truffle API introduction is at * {@link com.oracle.truffle.api.test.ChildNodeTest}. diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CallTarget.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CallTarget.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CallTarget.java Tue Apr 15 13:26:26 2014 +0200 @@ -27,7 +27,7 @@ /** * Represents the target of a call. */ -public abstract class CallTarget { +public interface CallTarget { public static final Object[] NO_ARGUMENTS = new Object[0]; @@ -37,9 +37,5 @@ * @param arguments passed arguments as an object array * @return the return result of the call */ - public abstract Object call(Object[] arguments); - - public final Object call() { - return call(NO_ARGUMENTS); - } + Object call(Object... arguments); } diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/RootCallTarget.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/RootCallTarget.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/RootCallTarget.java Tue Apr 15 13:26:26 2014 +0200 @@ -31,7 +31,7 @@ * Represents the target of a call to a {@link RootNode}, i.e., to another tree of nodes. Instances * of this class can be created using {@link TruffleRuntime#createCallTarget(RootNode)}. */ -public abstract class RootCallTarget extends CallTarget { +public abstract class RootCallTarget implements CallTarget { private final RootNode rootNode; diff -r 083e9e4df58a -r 2ed720ce9273 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Tue Apr 15 13:20:17 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Tue Apr 15 13:26:26 2014 +0200 @@ -39,7 +39,7 @@ } @Override - public Object call(Object[] args) { + public Object call(Object... args) { VirtualFrame frame = new DefaultVirtualFrame(getRootNode().getFrameDescriptor(), args); return callProxy(frame); }