# HG changeset patch # User Andreas Woess # Date 1380123241 -7200 # Node ID c7769440afd8793bf131a3444349b6c51d5d9b86 # Parent 0c4d7b468dd7522cc2d7639c8ce62309c141c81d improve NodeUtil.cloneNode. diff -r 0c4d7b468dd7 -r c7769440afd8 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Wed Sep 25 17:31:55 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Wed Sep 25 17:34:01 2013 +0200 @@ -292,12 +292,8 @@ @SuppressWarnings("unchecked") public static T cloneNode(T orig) { - Class clazz = orig.getClass(); - NodeClass nodeClass = NodeClass.get(clazz); - Node clone = orig.copy(); - if (clone == null) { - return null; - } + final Node clone = orig.copy(); + NodeClass nodeClass = NodeClass.get(clone.getClass()); unsafe.putObject(clone, nodeClass.parentOffset, null); @@ -305,10 +301,6 @@ Node child = (Node) unsafe.getObject(orig, fieldOffset); if (child != null) { Node clonedChild = cloneNode(child); - if (clonedChild == null) { - return null; - } - unsafe.putObject(clonedChild, nodeClass.parentOffset, clone); unsafe.putObject(clone, fieldOffset, clonedChild); } @@ -316,16 +308,13 @@ for (long fieldOffset : nodeClass.childrenOffsets) { Node[] children = (Node[]) unsafe.getObject(orig, fieldOffset); if (children != null) { - Node[] clonedChildren = children.clone(); - Arrays.fill(clonedChildren, null); + Node[] clonedChildren = (Node[]) Array.newInstance(children.getClass().getComponentType(), children.length); for (int i = 0; i < children.length; i++) { - Node clonedChild = cloneNode(children[i]); - if (clonedChild == null) { - return null; + if (children[i] != null) { + Node clonedChild = cloneNode(children[i]); + clonedChildren[i] = clonedChild; + unsafe.putObject(clonedChild, nodeClass.parentOffset, clone); } - - clonedChildren[i] = clonedChild; - unsafe.putObject(clonedChild, nodeClass.parentOffset, clone); } unsafe.putObject(clone, fieldOffset, clonedChildren); }