comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 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 5634b199c4da
children 915ebb306fcc
comparison
equal deleted inserted replaced
15833:e28cb4a30e86 15834:fc6f8d143c68
45 * accesses. 45 * accesses.
46 */ 46 */
47 public interface FieldOffsetProvider { 47 public interface FieldOffsetProvider {
48 48
49 long objectFieldOffset(Field field); 49 long objectFieldOffset(Field field);
50
51 int getTypeSize(Class<?> clazz);
50 } 52 }
51 53
52 private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() { 54 private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() {
53 55
54 @Override 56 @Override
55 public long objectFieldOffset(Field field) { 57 public long objectFieldOffset(Field field) {
56 return unsafe.objectFieldOffset(field); 58 return unsafe.objectFieldOffset(field);
59 }
60
61 @Override
62 public int getTypeSize(Class<?> clazz) {
63 if (!clazz.isPrimitive()) {
64 return Unsafe.ARRAY_OBJECT_INDEX_SCALE;
65 } else if (clazz == int.class) {
66 return Unsafe.ARRAY_INT_INDEX_SCALE;
67 } else {
68 throw new UnsupportedOperationException("unsupported field type: " + clazz);
69 }
57 } 70 }
58 }; 71 };
59 72
60 public static enum NodeFieldKind { 73 public static enum NodeFieldKind {
61 /** The single {@link Node#getParent() parent} field. */ 74 /** The single {@link Node#getParent() parent} field. */