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) {