Mercurial > hg > graal-compiler
changeset 9952:5d91b0b67cba
Introduce Frame.isInitialized in the Truffle API.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 10 Jun 2013 01:16:33 +0200 |
parents | c73690957f9b |
children | 60648c97cdd0 |
files | graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotImpl.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java |
diffstat | 6 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Mon Jun 10 01:16:33 2013 +0200 @@ -170,4 +170,13 @@ * @return the new materialized frame */ MaterializedFrame materialize(); + + /** + * To check whether the given {@link FrameSlot} has been initialized or not. An initialized slot + * has previously been read or modified. + * + * @param slot the slot + * @return true if the slot is uninitialized. + */ + boolean isInitialized(FrameSlot slot); }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java Mon Jun 10 01:16:33 2013 +0200 @@ -112,6 +112,13 @@ return clonedFrameDescriptor; } + public FrameDescriptor shallowCopy() { + FrameDescriptor clonedFrameDescriptor = new FrameDescriptor(this.typeConversion); + clonedFrameDescriptor.slots.addAll(slots); + clonedFrameDescriptor.identifierToSlotMap.putAll(identifierToSlotMap); + return clonedFrameDescriptor; + } + void updateVersion() { version.invalidate(); version = createVersion();
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotImpl.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotImpl.java Mon Jun 10 01:16:33 2013 +0200 @@ -29,7 +29,7 @@ private final int index; private FrameSlotKind kind; - protected FrameSlotImpl(FrameDescriptor descriptor, Object identifier, int index, FrameSlotKind kind) { + public FrameSlotImpl(FrameDescriptor descriptor, Object identifier, int index, FrameSlotKind kind) { this.descriptor = descriptor; this.identifier = identifier; this.index = index;
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java Mon Jun 10 01:16:33 2013 +0200 @@ -133,4 +133,9 @@ public FrameDescriptor getFrameDescriptor() { throw new UnsupportedOperationException("native frame"); } + + @Override + public boolean isInitialized(FrameSlot slot) { + throw new UnsupportedOperationException("native frame"); + } }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Mon Jun 10 01:16:33 2013 +0200 @@ -122,4 +122,9 @@ public FrameDescriptor getFrameDescriptor() { return wrapped.getFrameDescriptor(); } + + @Override + public boolean isInitialized(FrameSlot slot) { + return wrapped.isInitialized(slot); + } }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Mon Jun 10 01:08:23 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Mon Jun 10 01:16:33 2013 +0200 @@ -201,4 +201,9 @@ tags = Arrays.copyOf(tags, newSize); } } + + @Override + public boolean isInitialized(FrameSlot slot) { + return (this.tags[slot.getIndex()] != FrameSlotKind.Illegal.ordinal()); + } }