# HG changeset patch # User Andreas Woess # Date 1383159710 -3600 # Node ID 856a9864ed93df2951bf9dd9b371b3cc0e8f4c9e # Parent e9f23b348da2096d4424bc769808e964fe0075ed Frame: add is methods. diff -r e9f23b348da2 -r 856a9864ed93 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Wed Oct 30 17:31:13 2013 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Wed Oct 30 20:01:50 2013 +0100 @@ -251,7 +251,7 @@ resize(); } byte tag = this.getTags()[slotIndex]; - if (accessKind == FrameSlotKind.Object ? tag != 0 : tag != accessKind.ordinal()) { + if (tag != accessKind.ordinal()) { CompilerDirectives.transferToInterpreter(); if (slot.getKind() == accessKind || tag == 0) { descriptor.getTypeConversion().updateFrameSlot(this, slot, getValue(slot)); @@ -284,7 +284,7 @@ } else if (tag == FrameSlotKind.Float.ordinal()) { return getFloatUnsafe(slot); } else { - assert tag == FrameSlotKind.Object.ordinal() || tag == FrameSlotKind.Illegal.ordinal(); + assert tag == FrameSlotKind.Object.ordinal(); return getObjectUnsafe(slot); } } @@ -300,13 +300,47 @@ } } - @Override - public boolean isInitialized(FrameSlot slot) { + private byte getTag(FrameSlot slot) { int slotIndex = slot.getIndex(); if (slotIndex >= getTags().length) { CompilerDirectives.transferToInterpreter(); resize(); } - return getTags()[slotIndex] != 0; + return getTags()[slotIndex]; + } + + @Override + public boolean isObject(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Object.ordinal(); + } + + @Override + public boolean isByte(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Byte.ordinal(); + } + + @Override + public boolean isBoolean(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Boolean.ordinal(); + } + + @Override + public boolean isInt(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Int.ordinal(); + } + + @Override + public boolean isLong(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Long.ordinal(); + } + + @Override + public boolean isFloat(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Float.ordinal(); + } + + @Override + public boolean isDouble(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Double.ordinal(); } } diff -r e9f23b348da2 -r 856a9864ed93 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 Wed Oct 30 17:31:13 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.java Wed Oct 30 20:01:50 2013 +0100 @@ -191,11 +191,37 @@ 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. + * Check whether the given {@link FrameSlot} is of type object. + */ + boolean isObject(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type byte. + */ + boolean isByte(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type boolean. + */ + boolean isBoolean(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type int. */ - boolean isInitialized(FrameSlot slot); + boolean isInt(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type long. + */ + boolean isLong(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type float. + */ + boolean isFloat(FrameSlot slot); + + /** + * Check whether the given {@link FrameSlot} is of type double. + */ + boolean isDouble(FrameSlot slot); } diff -r e9f23b348da2 -r 856a9864ed93 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 Wed Oct 30 17:31:13 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/NativeFrame.java Wed Oct 30 20:01:50 2013 +0100 @@ -48,77 +48,77 @@ @Override public Object getObject(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setObject(FrameSlot slot, Object value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public byte getByte(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setByte(FrameSlot slot, byte value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public boolean getBoolean(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setBoolean(FrameSlot slot, boolean value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public int getInt(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setInt(FrameSlot slot, int value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public long getLong(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setLong(FrameSlot slot, long value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public float getFloat(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setFloat(FrameSlot slot, float value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public double getDouble(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public void setDouble(FrameSlot slot, double value) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override public Object getValue(FrameSlot slot) { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override @@ -133,7 +133,7 @@ @Override public MaterializedFrame materialize() { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); } @Override @@ -143,11 +143,45 @@ @Override public FrameDescriptor getFrameDescriptor() { - throw new UnsupportedOperationException("native frame"); + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isObject(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isByte(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isBoolean(FrameSlot slot) { + throw unsupportedInNativeFrame(); } @Override - public boolean isInitialized(FrameSlot slot) { + public boolean isInt(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isLong(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isFloat(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + @Override + public boolean isDouble(FrameSlot slot) { + throw unsupportedInNativeFrame(); + } + + private static UnsupportedOperationException unsupportedInNativeFrame() { throw new UnsupportedOperationException("native frame"); } } diff -r e9f23b348da2 -r 856a9864ed93 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 Wed Oct 30 17:31:13 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java Wed Oct 30 20:01:50 2013 +0100 @@ -136,7 +136,37 @@ } @Override - public boolean isInitialized(FrameSlot slot) { - return wrapped.isInitialized(slot); + public boolean isObject(FrameSlot slot) { + return wrapped.isObject(slot); + } + + @Override + public boolean isByte(FrameSlot slot) { + return wrapped.isByte(slot); + } + + @Override + public boolean isBoolean(FrameSlot slot) { + return wrapped.isBoolean(slot); + } + + @Override + public boolean isInt(FrameSlot slot) { + return wrapped.isInt(slot); + } + + @Override + public boolean isLong(FrameSlot slot) { + return wrapped.isLong(slot); + } + + @Override + public boolean isFloat(FrameSlot slot) { + return wrapped.isFloat(slot); + } + + @Override + public boolean isDouble(FrameSlot slot) { + return wrapped.isDouble(slot); } } diff -r e9f23b348da2 -r 856a9864ed93 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 Wed Oct 30 17:31:13 2013 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java Wed Oct 30 20:01:50 2013 +0100 @@ -200,12 +200,46 @@ } } - @Override - public boolean isInitialized(FrameSlot slot) { + private byte getTag(FrameSlot slot) { int slotIndex = slot.getIndex(); if (slotIndex >= tags.length) { resize(); } - return tags[slotIndex] != 0; + return tags[slotIndex]; + } + + @Override + public boolean isObject(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Object.ordinal(); + } + + @Override + public boolean isByte(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Byte.ordinal(); + } + + @Override + public boolean isBoolean(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Boolean.ordinal(); + } + + @Override + public boolean isInt(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Int.ordinal(); + } + + @Override + public boolean isLong(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Long.ordinal(); + } + + @Override + public boolean isFloat(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Float.ordinal(); + } + + @Override + public boolean isDouble(FrameSlot slot) { + return getTag(slot) == FrameSlotKind.Double.ordinal(); } }