Mercurial > hg > truffle
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. */ |