# HG changeset patch
# User Thomas Wuerthinger
# Date 1366989310 -7200
# Node ID e162d9e32830d5f05f3fc79f76f86cc75d3e7df9
# Parent fa188fbfe3fe4b2943ee227ae1c46a1195e69509
Added a clazz parameter to Frame.getArguments in order to allow unsafe access to the arguments object (i.e., avoiding the null check and the type cast).
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/TypeSystemTest.java
--- a/graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/TypeSystemTest.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/TypeSystemTest.java Fri Apr 26 17:15:10 2013 +0200
@@ -115,7 +115,7 @@
@Override
public Object execute(VirtualFrame frame) {
invocationCount++;
- return ((TestArguments) frame.getArguments()).get(index);
+ return frame.getArguments(TestArguments.class).get(index);
}
}
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ArgumentsTest.java
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ArgumentsTest.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ArgumentsTest.java Fri Apr 26 17:15:10 2013 +0200
@@ -35,7 +35,7 @@
* A guest language can pass its own custom arguments when invoking a Truffle method by creating a
* subclass of {@link Arguments}. When invoking a call target with
* {@link CallTarget#call(Arguments)}, the arguments can be passed. A Truffle node can access the
- * arguments passed into the Truffle method by using {@link VirtualFrame#getArguments()}.
+ * arguments passed into the Truffle method by using {@link VirtualFrame#getArguments}.
*
*
*
@@ -97,7 +97,7 @@
}
int execute(VirtualFrame frame) {
- return ((TestArguments) frame.getArguments()).values[index];
+ return frame.getArguments(TestArguments.class).values[index];
}
}
}
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Fri Apr 26 17:15:10 2013 +0200
@@ -36,9 +36,16 @@
FrameDescriptor getFrameDescriptor();
/**
+ * Retrieves the arguments object from this frame. The runtime assumes that the arguments object
+ * is never null. Additionally, the runtime may assume that the given parameter indicating the
+ * class of the arguments object is correct. The runtime is not required to actually check the
+ * type of the arguments object. The parameter must be a value that can be reduced to a compile
+ * time constant.
+ *
+ * @param clazz the known type of the arguments object as a compile time constant
* @return the arguments used when calling this method
*/
- Arguments getArguments();
+ T getArguments(Class clazz);
/**
* Read access to a local variable of type {@link Object}.
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java Fri Apr 26 17:15:10 2013 +0200
@@ -38,9 +38,10 @@
this.arguments = arguments;
}
+ @SuppressWarnings("unchecked")
@Override
- public Arguments getArguments() {
- return arguments;
+ public T getArguments(Class clazz) {
+ return (T) arguments;
}
@Override
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Fri Apr 26 17:15:10 2013 +0200
@@ -34,8 +34,8 @@
}
@Override
- public Arguments getArguments() {
- return wrapped.getArguments();
+ public T getArguments(Class clazz) {
+ return wrapped.getArguments(clazz);
}
@Override
diff -r fa188fbfe3fe -r e162d9e32830 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Fri Apr 26 15:58:41 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Fri Apr 26 17:15:10 2013 +0200
@@ -43,9 +43,10 @@
this.tags = new byte[descriptor.getSize()];
}
+ @SuppressWarnings("unchecked")
@Override
- public Arguments getArguments() {
- return arguments;
+ public T getArguments(Class clazz) {
+ return (T) arguments;
}
@Override