changeset 10860:1b11e3c8529c

Merge.
author Christian Humer <christian.humer@gmail.com>
date Tue, 23 Jul 2013 17:48:17 +0200
parents 7a0ba9b20fec (diff) f2008a93ad54 (current diff)
children 6872c61c1d3e
files
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Tue Jul 23 11:19:47 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Tue Jul 23 17:48:17 2013 +0200
@@ -1374,7 +1374,25 @@
                 if (Utils.isAssignable(getContext(), var.asType(), getContext().getTruffleTypes().getNode())) {
                     builder.string(" = adoptChild(copy.").string(varName).string(")");
                 } else if (Utils.isAssignable(getContext(), var.asType(), getContext().getTruffleTypes().getNodeArray())) {
-                    builder.string(" = adoptChildren(copy.").string(varName).string(")");
+                    NodeData node = getModel().getNode();
+                    NodeChildData child = node.findChild(varName);
+                    if (child != null) {
+                        builder.string(" = adoptChildren(");
+                        builder.string("new ").type((child.getNodeType())).string(" {");
+                        builder.startCommaGroup();
+                        for (ActualParameter parameter : getModel().getParameters()) {
+                            NodeChildData foundChild = node.findChild(parameter.getSpecification().getName());
+                            if (foundChild == child) {
+                                builder.startGroup();
+                                builder.string("copy.").string(varName).string("[").string(String.valueOf(parameter.getIndex())).string("]");
+                                builder.end();
+                            }
+                        }
+
+                        builder.end().string("})");
+                    } else {
+                        builder.string(" = adoptChildren(copy.").string(varName).string(")");
+                    }
                 } else {
                     builder.string(" = copy.").string(varName);
                 }