# HG changeset patch # User Andreas Woess # Date 1379728869 -7200 # Node ID c287d13cb8b0d1c914e39d26a4532db449bd4d02 # Parent 85b846b3169035e27c150c72ad4d950d77bb8bc4 Truffle-DSL: use clone() for copying node arrays in copy constructor. diff -r 85b846b31690 -r c287d13cb8b0 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Fri Sep 20 16:30:18 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Sat Sep 21 04:01:09 2013 +0200 @@ -1185,24 +1185,6 @@ return builder.getRoot(); } - private CodeTree createCopyArray(CodeTreeBuilder parent, NodeChildData child, TypeMirror arrayType, CodeBlock accessElement) { - CodeTreeBuilder builder = parent.create(); - NodeData node = getModel().getNode(); - builder.string("new ").type(arrayType).string(" {"); - builder.startCommaGroup(); - for (ActualParameter parameter : getModel().getParameters()) { - NodeChildData foundChild = node.findChild(parameter.getSpecification().getName()); - if (foundChild == child) { - builder.startGroup(); - builder.tree(accessElement.create(builder, String.valueOf(parameter.getIndex()))); - builder.end(); - } - } - builder.end(); - builder.end().string("}"); - return builder.getRoot(); - } - private CodeExecutableElement createCopyConstructor(CodeTypeElement type, ExecutableElement superConstructor, ExecutableElement sourceSectionConstructor) { CodeExecutableElement method = new CodeExecutableElement(null, type.getSimpleName().toString()); CodeTreeBuilder builder = method.createBuilder(); @@ -1219,18 +1201,11 @@ final String varName = var.getSimpleName().toString(); final TypeMirror varType = var.asType(); - final String copyAccess = "copy." + varName; - CodeTree init = CodeTreeBuilder.singleString(copyAccess); - if (Utils.isAssignable(getContext(), var.asType(), getContext().getTruffleTypes().getNodeArray())) { - NodeChildData child = getModel().getNode().findChild(varName); - init = createCopyArray(builder, child, varType, new CodeBlock() { - - public CodeTree create(CodeTreeBuilder parent, String index) { - return CodeTreeBuilder.singleString(copyAccess + "[" + index + "]"); - } - }); + String copyAccess = "copy." + varName; + if (Utils.isAssignable(getContext(), varType, getContext().getTruffleTypes().getNodeArray())) { + copyAccess += ".clone()"; } - init = createAdoptChild(builder, varType, init); + CodeTree init = createAdoptChild(builder, varType, CodeTreeBuilder.singleString(copyAccess)); builder.startStatement().string("this.").string(varName).string(" = ").tree(init).end(); } if (getModel().getNode().isPolymorphic()) {