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