comparison truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.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 9c8c0937da41
children dc83cc1f94f2
comparison
equal deleted inserted replaced
21984:de52ea7de779 21985:4858c5e074e9
157 private void deserializeDataFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException { 157 private void deserializeDataFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException {
158 for (int i = 0; i < nodeFields.length; i++) { 158 for (int i = 0; i < nodeFields.length; i++) {
159 NodeFieldAccessor field = nodeFields[i]; 159 NodeFieldAccessor field = nodeFields[i];
160 if (field.getKind() == NodeFieldKind.DATA) { 160 if (field.getKind() == NodeFieldKind.DATA) {
161 Class<?> fieldClass = field.getType(); 161 Class<?> fieldClass = field.getType();
162 long offset = field.getOffset(); 162 long offset = getFieldOffset(field);
163 163
164 // source sections are not serialized 164 // source sections are not serialized
165 // TODO add support for source sections 165 // TODO add support for source sections
166 if (field.getType().isAssignableFrom(SourceSection.class)) { 166 if (field.getType().isAssignableFrom(SourceSection.class)) {
167 continue; 167 continue;
239 239
240 private void deserializeChildFields(Node parent, NodeFieldAccessor[] nodeFields) { 240 private void deserializeChildFields(Node parent, NodeFieldAccessor[] nodeFields) {
241 for (int i = nodeFields.length - 1; i >= 0; i--) { 241 for (int i = nodeFields.length - 1; i >= 0; i--) {
242 NodeFieldAccessor field = nodeFields[i]; 242 NodeFieldAccessor field = nodeFields[i];
243 if (field.getKind() == NodeFieldKind.CHILD) { 243 if (field.getKind() == NodeFieldKind.CHILD) {
244 unsafe.putObject(parent, field.getOffset(), popNode(parent, field.getType())); 244 unsafe.putObject(parent, getFieldOffset(field), popNode(parent, field.getType()));
245 } 245 }
246 } 246 }
247 } 247 }
248 248
249 private void deserializeChildrenFields(Node parent, NodeFieldAccessor[] nodeFields) { 249 private void deserializeChildrenFields(Node parent, NodeFieldAccessor[] nodeFields) {
250 for (int i = nodeFields.length - 1; i >= 0; i--) { 250 for (int i = nodeFields.length - 1; i >= 0; i--) {
251 NodeFieldAccessor field = nodeFields[i]; 251 NodeFieldAccessor field = nodeFields[i];
252 if (field.getKind() == NodeFieldKind.CHILDREN) { 252 if (field.getKind() == NodeFieldKind.CHILDREN) {
253 unsafe.putObject(parent, field.getOffset(), popArray(parent, field.getType())); 253 unsafe.putObject(parent, getFieldOffset(field), popArray(parent, field.getType()));
254 } 254 }
255 } 255 }
256 } 256 }
257 257
258 private static Node updateParent(Node parent, Node child) { 258 private static Node updateParent(Node parent, Node child) {
260 NodeClass nodeClass = NodeClass.get(child.getClass()); 260 NodeClass nodeClass = NodeClass.get(child.getClass());
261 nodeClass.getNodeClassField().putObject(child, nodeClass); 261 nodeClass.getNodeClassField().putObject(child, nodeClass);
262 nodeClass.getParentField().putObject(child, parent); 262 nodeClass.getParentField().putObject(child, parent);
263 } 263 }
264 return child; 264 return child;
265 }
266
267 static long getFieldOffset(NodeFieldAccessor field) {
268 if (field instanceof NodeFieldAccessor.AbstractUnsafeNodeFieldAccessor) {
269 return ((NodeFieldAccessor.AbstractUnsafeNodeFieldAccessor) field).getOffset();
270 } else {
271 try {
272 Field reflectionField = field.getDeclaringClass().getDeclaredField(field.getName());
273 return unsafe.objectFieldOffset(reflectionField);
274 } catch (NoSuchFieldException | SecurityException e) {
275 throw new RuntimeException(e);
276 }
277 }
265 } 278 }
266 279
267 private static Unsafe loadUnsafe() { 280 private static Unsafe loadUnsafe() {
268 try { 281 try {
269 return Unsafe.getUnsafe(); 282 return Unsafe.getUnsafe();