Mercurial > hg > truffle
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(); |