changeset 12643:856a9864ed93

Frame: add is<Type> methods.
author Andreas Woess <andreas.woess@jku.at>
date Wed, 30 Oct 2013 20:01:50 +0100
parents e9f23b348da2
children e122dc0436be
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/Frame.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 5 files changed, 192 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- 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();
     }
 }
--- 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);
 }
--- 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");
     }
 }
--- 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);
     }
 }
--- 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();
     }
 }