diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java @ 12405:139b84d713bc

Truffle API adjustments: Simplify frame handling. Introduce cast for MaterializedFrame objects.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 14 Oct 2013 23:28:10 +0200
parents 269e6794e1ec
children 856a9864ed93
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java	Mon Oct 14 18:48:21 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java	Mon Oct 14 23:28:10 2013 +0200
@@ -75,7 +75,7 @@
 
     @Override
     public void setObject(FrameSlot slot, Object value) {
-        verifySetObject(slot);
+        verifySet(slot, FrameSlotKind.Object);
         locals[slot.getIndex()] = value;
     }
 
@@ -86,7 +86,7 @@
     }
 
     @Override
-    public void setByte(FrameSlot slot, byte value) throws FrameSlotTypeException {
+    public void setByte(FrameSlot slot, byte value) {
         verifySet(slot, FrameSlotKind.Byte);
         locals[slot.getIndex()] = value;
     }
@@ -98,7 +98,7 @@
     }
 
     @Override
-    public void setBoolean(FrameSlot slot, boolean value) throws FrameSlotTypeException {
+    public void setBoolean(FrameSlot slot, boolean value) {
         verifySet(slot, FrameSlotKind.Boolean);
         locals[slot.getIndex()] = value;
     }
@@ -110,7 +110,7 @@
     }
 
     @Override
-    public void setInt(FrameSlot slot, int value) throws FrameSlotTypeException {
+    public void setInt(FrameSlot slot, int value) {
         verifySet(slot, FrameSlotKind.Int);
         locals[slot.getIndex()] = value;
     }
@@ -122,7 +122,7 @@
     }
 
     @Override
-    public void setLong(FrameSlot slot, long value) throws FrameSlotTypeException {
+    public void setLong(FrameSlot slot, long value) {
         verifySet(slot, FrameSlotKind.Long);
         locals[slot.getIndex()] = value;
     }
@@ -134,7 +134,7 @@
     }
 
     @Override
-    public void setFloat(FrameSlot slot, float value) throws FrameSlotTypeException {
+    public void setFloat(FrameSlot slot, float value) {
         verifySet(slot, FrameSlotKind.Float);
         locals[slot.getIndex()] = value;
     }
@@ -146,7 +146,7 @@
     }
 
     @Override
-    public void setDouble(FrameSlot slot, double value) throws FrameSlotTypeException {
+    public void setDouble(FrameSlot slot, double value) {
         verifySet(slot, FrameSlotKind.Double);
         locals[slot.getIndex()] = value;
     }
@@ -165,15 +165,7 @@
         return locals[slotIndex];
     }
 
-    private void verifySet(FrameSlot slot, FrameSlotKind accessKind) throws FrameSlotTypeException {
-        FrameSlotKind slotKind = slot.getKind();
-        if (slotKind != accessKind) {
-            if (slotKind == FrameSlotKind.Illegal) {
-                slot.setKind(accessKind);
-            } else {
-                throw new FrameSlotTypeException();
-            }
-        }
+    private void verifySet(FrameSlot slot, FrameSlotKind accessKind) {
         int slotIndex = slot.getIndex();
         if (slotIndex >= tags.length) {
             resize();
@@ -181,24 +173,13 @@
         tags[slotIndex] = (byte) accessKind.ordinal();
     }
 
-    private void verifySetObject(FrameSlot slot) {
-        if (slot.getKind() != FrameSlotKind.Object) {
-            slot.setKind(FrameSlotKind.Object);
-        }
-        int slotIndex = slot.getIndex();
-        if (slotIndex >= tags.length) {
-            resize();
-        }
-        tags[slotIndex] = (byte) FrameSlotKind.Object.ordinal();
-    }
-
     private void verifyGet(FrameSlot slot, FrameSlotKind accessKind) throws FrameSlotTypeException {
         int slotIndex = slot.getIndex();
         if (slotIndex >= tags.length) {
             resize();
         }
         byte tag = tags[slotIndex];
-        if (accessKind == FrameSlotKind.Object ? (tag & 0xfe) != 0 : tag != accessKind.ordinal()) {
+        if (accessKind == FrameSlotKind.Object ? tag != 0 : tag != accessKind.ordinal()) {
             if (slot.getKind() == accessKind || tag == 0) {
                 descriptor.getTypeConversion().updateFrameSlot(this, slot, getValue(slot));
                 if (tags[slotIndex] == accessKind.ordinal()) {