# HG changeset patch # User Lukas Stadler # Date 1360078785 -3600 # Node ID be7b98533b17c97e8afe75fcbe672907211b6961 # Parent f629d4a264c67d464309b7159649c9855f942d73# Parent fec77d5cd187144e44a58a3e16d9cb7c44472639 Merge diff -r f629d4a264c6 -r be7b98533b17 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Tue Feb 05 16:39:45 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); } diff -r f629d4a264c6 -r be7b98533b17 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 Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Tue Feb 05 16:39:45 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(); } diff -r f629d4a264c6 -r be7b98533b17 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/PackedFrame.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/PackedFrame.java Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/PackedFrame.java Tue Feb 05 16:39:45 2013 +0100 @@ -35,5 +35,5 @@ * * @return the virtual frame that was the content of this packed frame */ - VirtualFrame unpack(); + Frame unpack(); } diff -r f629d4a264c6 -r be7b98533b17 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/VirtualFrame.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/VirtualFrame.java Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/VirtualFrame.java Tue Feb 05 16:39:45 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(); } diff -r f629d4a264c6 -r be7b98533b17 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 Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Tue Feb 05 16:39:45 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; + } } diff -r f629d4a264c6 -r be7b98533b17 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Feb 05 15:53:21 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Feb 05 16:39:45 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)); + } }