changeset 7719:c1f63bbdf7b1

Merge
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 05 Feb 2013 16:21:14 +0100
parents 7503fdc516d1 (current diff) fec77d5cd187 (diff)
children fad3f591580c
files
diffstat 6 files changed, 62 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java	Tue Feb 05 16:21:14 2013 +0100
@@ -58,4 +58,20 @@
      * @return the new call target object
      */
     CallTarget createCallTarget(RootNode rootNode, FrameDescriptor frameDescriptor);
+
+    /**
+     * Creates a new materialized frame object that can be used to store values.
+     * 
+     * @return the newly created materialized frame object
+     */
+    MaterializedFrame createMaterializedFrame(Arguments arguments);
+
+    /**
+     * Creates a new materialized frame object with the given frame descriptor that can be used to
+     * store values.
+     * 
+     * @param frameDescriptor the frame descriptor describing this frame's values
+     * @return the newly created materialized frame object
+     */
+    MaterializedFrame createMaterializedFrame(Arguments arguments, FrameDescriptor frameDescriptor);
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java	Tue Feb 05 16:21:14 2013 +0100
@@ -132,4 +132,23 @@
     void setDouble(FrameSlot slot, double value);
 
     void updateToLatestVersion();
+
+    /**
+     * Converts this virtual frame into a packed frame that has no longer direct access to the local
+     * variables. This packing is an important hint to the Truffle optimizer and therefore passing
+     * around a {@link PackedFrame} should be preferred over passing around a {@link VirtualFrame}
+     * when the probability that an unpacking will occur is low.
+     * 
+     * @return the packed frame
+     */
+    PackedFrame pack();
+
+    /**
+     * Materializes this frame, which allows it to be stored in a field or cast to
+     * {@link java.lang.Object}. The frame however looses the ability to be packed or to access the
+     * caller frame.
+     * 
+     * @return the new materialized frame
+     */
+    MaterializedFrame materialize();
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/PackedFrame.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/PackedFrame.java	Tue Feb 05 16:21:14 2013 +0100
@@ -35,5 +35,5 @@
      * 
      * @return the virtual frame that was the content of this packed frame
      */
-    VirtualFrame unpack();
+    Frame unpack();
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/VirtualFrame.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/VirtualFrame.java	Tue Feb 05 16:21:14 2013 +0100
@@ -35,29 +35,10 @@
 public interface VirtualFrame extends Frame {
 
     /**
-     * Converts this virtual frame into a packed frame that has no longer direct access to the local
-     * variables. This packing is an important hint to the Truffle optimizer and therefore passing
-     * around a {@link PackedFrame} should be preferred over passing around a {@link VirtualFrame}
-     * when the probability that an unpacking will occur is low.
-     * 
-     * @return the packed frame
-     */
-    PackedFrame pack();
-
-    /**
      * Accesses the caller frame passed in via {@link CallTarget#call}. To get full access, it must
      * be first unpacked using {@link PackedFrame#unpack()}.
      * 
      * @return the caller frame or null if this was a root method call
      */
     PackedFrame getCaller();
-
-    /**
-     * Materializes this frame, which allows it to be stored in a field or cast to
-     * {@link java.lang.Object}. The frame however looses the ability to be packed or to access the
-     * caller frame.
-     * 
-     * @return the new materialized frame
-     */
-    MaterializedFrame materialize();
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java	Tue Feb 05 16:21:14 2013 +0100
@@ -25,7 +25,7 @@
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.frame.*;
 
-final class DefaultMaterializedFrame implements MaterializedFrame {
+final class DefaultMaterializedFrame implements MaterializedFrame, PackedFrame {
 
     private final DefaultVirtualFrame wrapped;
 
@@ -102,4 +102,19 @@
     public void updateToLatestVersion() {
         wrapped.updateToLatestVersion();
     }
+
+    @Override
+    public PackedFrame pack() {
+        return this;
+    }
+
+    @Override
+    public MaterializedFrame materialize() {
+        return this;
+    }
+
+    @Override
+    public Frame unpack() {
+        return this;
+    }
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Tue Feb 05 15:40:17 2013 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Tue Feb 05 16:21:14 2013 +0100
@@ -46,4 +46,14 @@
     public CallTarget createCallTarget(RootNode rootNode) {
         return createCallTarget(rootNode, new FrameDescriptor());
     }
+
+    @Override
+    public MaterializedFrame createMaterializedFrame(Arguments arguments) {
+        return createMaterializedFrame(arguments, new FrameDescriptor());
+    }
+
+    @Override
+    public MaterializedFrame createMaterializedFrame(Arguments arguments, FrameDescriptor frameDescriptor) {
+        return new DefaultMaterializedFrame(new DefaultVirtualFrame(frameDescriptor, null, arguments));
+    }
 }