Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 18750:8a758dce7d80
Truffle: added new deepCopy method to Node.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 29 Dec 2014 23:38:08 +0100 |
parents | cb4d5cc2b52b |
children | e55e18c1f40d |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Dec 29 23:37:58 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Dec 29 23:38:08 2014 +0100 @@ -450,6 +450,10 @@ @SuppressWarnings("unchecked") public static <T extends Node> T cloneNode(T orig) { + return (T) orig.deepCopy(); + } + + static Node deepCopyImpl(Node orig) { final Node clone = orig.copy(); NodeClass nodeClass = NodeClass.get(clone.getClass()); @@ -458,7 +462,7 @@ for (long fieldOffset : nodeClass.childOffsets) { Node child = (Node) unsafe.getObject(orig, fieldOffset); if (child != null) { - Node clonedChild = cloneNode(child); + Node clonedChild = child.deepCopy(); unsafe.putObject(clonedChild, nodeClass.parentOffset, clone); unsafe.putObject(clone, fieldOffset, clonedChild); } @@ -469,7 +473,7 @@ Object[] clonedChildren = (Object[]) Array.newInstance(children.getClass().getComponentType(), children.length); for (int i = 0; i < children.length; i++) { if (children[i] != null) { - Node clonedChild = cloneNode((Node) children[i]); + Node clonedChild = ((Node) children[i]).deepCopy(); clonedChildren[i] = clonedChild; unsafe.putObject(clonedChild, nodeClass.parentOffset, clone); } @@ -483,7 +487,7 @@ unsafe.putObject(clone, fieldOffset, ((NodeCloneable) cloneable).clone()); } } - return (T) clone; + return clone; } public static List<Node> findNodeChildren(Node node) {