comparison truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java @ 21985:4858c5e074e9

clean up NodeFieldAccessor (remove #getOffset())
author Andreas Woess <andreas.woess@oracle.com>
date Fri, 26 Jun 2015 16:25:41 +0200
parents 08db96a633b9
children dc83cc1f94f2
comparison
equal deleted inserted replaced
21984:de52ea7de779 21985:4858c5e074e9
54 54
55 private final NodeFieldKind kind; 55 private final NodeFieldKind kind;
56 private final Class<?> declaringClass; 56 private final Class<?> declaringClass;
57 private final String name; 57 private final String name;
58 protected final Class<?> type; 58 protected final Class<?> type;
59 /* TODO: This field should be moved to UnsafeNodeField. */ 59
60 protected final long offset; 60 protected NodeFieldAccessor(NodeFieldKind kind, Class<?> declaringClass, String name, Class<?> type) {
61
62 protected NodeFieldAccessor(NodeFieldKind kind, Class<?> declaringClass, String name, Class<?> type, long offset) {
63 this.kind = kind; 61 this.kind = kind;
64 this.declaringClass = declaringClass; 62 this.declaringClass = declaringClass;
65 this.name = name; 63 this.name = name;
66 this.type = type; 64 this.type = type;
67 this.offset = offset;
68 } 65 }
69 66
70 protected static NodeFieldAccessor create(NodeFieldKind kind, Field field) { 67 protected static NodeFieldAccessor create(NodeFieldKind kind, Field field) {
71 if (USE_UNSAFE) { 68 if (USE_UNSAFE) {
72 return new UnsafeNodeField(kind, field); 69 return new UnsafeNodeField(kind, field);
87 return declaringClass; 84 return declaringClass;
88 } 85 }
89 86
90 public String getName() { 87 public String getName() {
91 return name; 88 return name;
92 }
93
94 /*
95 * TODO: This method should be removed from here. It should be an abstract method in
96 * AbstractUnsafeNodeFieldAccessor, and implemented in UnsafeNodeField.
97 */
98 public long getOffset() {
99 return offset;
100 } 89 }
101 90
102 public abstract void putObject(Node receiver, Object value); 91 public abstract void putObject(Node receiver, Object value);
103 92
104 public abstract Object getObject(Node receiver); 93 public abstract Object getObject(Node receiver);
140 } 129 }
141 }; 130 };
142 131
143 public abstract static class AbstractUnsafeNodeFieldAccessor extends NodeFieldAccessor { 132 public abstract static class AbstractUnsafeNodeFieldAccessor extends NodeFieldAccessor {
144 133
145 protected AbstractUnsafeNodeFieldAccessor(NodeFieldKind kind, Class<?> declaringClas, String name, Class<?> type, long offset) { 134 protected AbstractUnsafeNodeFieldAccessor(NodeFieldKind kind, Class<?> declaringClass, String name, Class<?> type) {
146 super(kind, declaringClas, name, type, offset); 135 super(kind, declaringClass, name, type);
147 } 136 }
148 137
149 /* TODO abstract long getOffset() should be defined here. */ 138 public abstract long getOffset();
150 139
151 @Override 140 @Override
152 public void putObject(Node receiver, Object value) { 141 public void putObject(Node receiver, Object value) {
153 if (!type.isPrimitive() && value == null || type.isInstance(value)) { 142 if (!type.isPrimitive() && value == null || type.isInstance(value)) {
154 unsafe.putObject(receiver, getOffset(), value); 143 unsafe.putObject(receiver, getOffset(), value);
189 } 178 }
190 } 179 }
191 } 180 }
192 181
193 private static final class UnsafeNodeField extends AbstractUnsafeNodeFieldAccessor { 182 private static final class UnsafeNodeField extends AbstractUnsafeNodeFieldAccessor {
194 /* TODO the offset field should be here, not in NodeFieldAccessor. */ 183 private final long offset;
195 184
196 protected UnsafeNodeField(NodeFieldKind kind, Field field) { 185 protected UnsafeNodeField(NodeFieldKind kind, Field field) {
197 super(kind, field.getDeclaringClass(), field.getName(), field.getType(), unsafeFieldOffsetProvider.objectFieldOffset(field)); 186 super(kind, field.getDeclaringClass(), field.getName(), field.getType());
187 this.offset = unsafeFieldOffsetProvider.objectFieldOffset(field);
188 }
189
190 @Override
191 public long getOffset() {
192 return offset;
198 } 193 }
199 } 194 }
200 195
201 private static final class ReflectionNodeField extends NodeFieldAccessor { 196 private static final class ReflectionNodeField extends NodeFieldAccessor {
202 private final Field field; 197 private final Field field;
203 198
204 protected ReflectionNodeField(NodeFieldKind kind, Field field) { 199 protected ReflectionNodeField(NodeFieldKind kind, Field field) {
205 super(kind, field.getDeclaringClass(), field.getName(), field.getType(), unsafeFieldOffsetProvider.objectFieldOffset(field)); 200 super(kind, field.getDeclaringClass(), field.getName(), field.getType());
206 this.field = field; 201 this.field = field;
207 field.setAccessible(true); 202 field.setAccessible(true);
208 } 203 }
209 204
210 @Override 205 @Override