comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 19012:f5b83e7b2b4c

Truffle: simplify NodeUtil.findChildField
author Andreas Woess <andreas.woess@jku.at>
date Thu, 29 Jan 2015 03:11:53 +0100
parents 3bf612703773
children 67d9e635102f
comparison
equal deleted inserted replaced
19011:203c7256e123 19012:f5b83e7b2b4c
360 360
361 public NodeField[] getChildrenFields() { 361 public NodeField[] getChildrenFields() {
362 return childrenFields; 362 return childrenFields;
363 } 363 }
364 364
365 public NodeField findField(long fieldOffset) {
366 for (NodeField field : getFields()) {
367 if (field.getOffset() == fieldOffset) {
368 return field;
369 }
370 }
371 return null;
372 }
373
374 @Override 365 @Override
375 public int hashCode() { 366 public int hashCode() {
376 return clazz.hashCode(); 367 return clazz.hashCode();
377 } 368 }
378 369
663 public static NodeField findChildField(Node parent, Node child) { 654 public static NodeField findChildField(Node parent, Node child) {
664 assert child != null; 655 assert child != null;
665 NodeClass parentNodeClass = NodeClass.get(parent.getClass()); 656 NodeClass parentNodeClass = NodeClass.get(parent.getClass());
666 657
667 for (NodeField field : parentNodeClass.getChildFields()) { 658 for (NodeField field : parentNodeClass.getChildFields()) {
668 final long fieldOffset = field.getOffset(); 659 if (field.getObject(parent) == child) {
669 if (unsafe.getObject(parent, fieldOffset) == child) { 660 return field;
670 return parentNodeClass.findField(fieldOffset);
671 } 661 }
672 } 662 }
673 663
674 for (NodeField field : parentNodeClass.getChildrenFields()) { 664 for (NodeField field : parentNodeClass.getChildrenFields()) {
675 final long fieldOffset = field.getOffset(); 665 Object arrayObject = field.getObject(parent);
676 Object arrayObject = unsafe.getObject(parent, fieldOffset);
677 if (arrayObject != null) { 666 if (arrayObject != null) {
678 Object[] array = (Object[]) arrayObject; 667 Object[] array = (Object[]) arrayObject;
679 for (int i = 0; i < array.length; i++) { 668 for (int i = 0; i < array.length; i++) {
680 if (array[i] == child) { 669 if (array[i] == child) {
681 return parentNodeClass.findField(fieldOffset); 670 return field;
682 } 671 }
683 } 672 }
684 } 673 }
685 } 674 }
686 return null; 675 return null;