Mercurial > hg > truffle
changeset 11743:c287d13cb8b0
Truffle-DSL: use clone() for copying node arrays in copy constructor.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Sat, 21 Sep 2013 04:01:09 +0200 |
parents | 85b846b31690 |
children | 0ba840567fba |
files | graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java |
diffstat | 1 files changed, 4 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- 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<String> 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<String>() { - - 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()) {