changeset 15834:fc6f8d143c68

Introduce method to customize type size
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 20 May 2014 18:58:03 -0700
parents e28cb4a30e86
children 187634c8099c
files graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java
diffstat 1 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Tue May 20 18:57:27 2014 -0700
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Tue May 20 18:58:03 2014 -0700
@@ -47,6 +47,8 @@
     public interface FieldOffsetProvider {
 
         long objectFieldOffset(Field field);
+
+        int getTypeSize(Class<?> clazz);
     }
 
     private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() {
@@ -55,6 +57,17 @@
         public long objectFieldOffset(Field field) {
             return unsafe.objectFieldOffset(field);
         }
+
+        @Override
+        public int getTypeSize(Class<?> clazz) {
+            if (!clazz.isPrimitive()) {
+                return Unsafe.ARRAY_OBJECT_INDEX_SCALE;
+            } else if (clazz == int.class) {
+                return Unsafe.ARRAY_INT_INDEX_SCALE;
+            } else {
+                throw new UnsupportedOperationException("unsupported field type: " + clazz);
+            }
+        }
     };
 
     public static enum NodeFieldKind {