comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 14628:a08b8694f556

Truffle: Node API changes deprecate adoptChild, no longer needed in constructor add Node#insert for inserting new nodes into the tree (previously adoptChild) add Node#adoptChildren() helper method that adopts all (direct and indirect) children of a node, automatically called in TruffleRuntime#createCallTarget
author Andreas Woess <andreas.woess@jku.at>
date Wed, 19 Mar 2014 23:11:46 +0100
parents fdabadc7980d
children f0bb82ebe30c
comparison
equal deleted inserted replaced
14627:46c020971d9c 14628:a08b8694f556
929 clazz.add(var); 929 clazz.add(var);
930 930
931 CodeExecutableElement setter = new CodeExecutableElement(modifiers(PROTECTED), context.getType(void.class), "setNext0"); 931 CodeExecutableElement setter = new CodeExecutableElement(modifiers(PROTECTED), context.getType(void.class), "setNext0");
932 setter.getParameters().add(new CodeVariableElement(clazz.asType(), "next0")); 932 setter.getParameters().add(new CodeVariableElement(clazz.asType(), "next0"));
933 CodeTreeBuilder builder = setter.createBuilder(); 933 CodeTreeBuilder builder = setter.createBuilder();
934 builder.statement("this.next0 = adoptChild(next0)"); 934 builder.statement("this.next0 = insert(next0)");
935 clazz.add(setter); 935 clazz.add(setter);
936 936
937 CodeExecutableElement genericCachedExecute = createCachedExecute(node, node.getPolymorphicSpecialization()); 937 CodeExecutableElement genericCachedExecute = createCachedExecute(node, node.getPolymorphicSpecialization());
938 clazz.add(genericCachedExecute); 938 clazz.add(genericCachedExecute);
939 939
1208 1208
1209 builder.startStatement(); 1209 builder.startStatement();
1210 String fieldName = var.getSimpleName().toString(); 1210 String fieldName = var.getSimpleName().toString();
1211 1211
1212 CodeTree init = createStaticCast(builder, child, fieldName); 1212 CodeTree init = createStaticCast(builder, child, fieldName);
1213 init = createAdoptChild(builder, var.asType(), init);
1214 1213
1215 builder.string("this.").string(fieldName).string(" = ").tree(init); 1214 builder.string("this.").string(fieldName).string(" = ").tree(init);
1216 builder.end(); 1215 builder.end();
1217 } 1216 }
1218 return method; 1217 return method;
1227 } 1226 }
1228 } 1227 }
1229 return CodeTreeBuilder.singleString(fieldName); 1228 return CodeTreeBuilder.singleString(fieldName);
1230 } 1229 }
1231 1230
1232 private CodeTree createAdoptChild(CodeTreeBuilder parent, TypeMirror type, CodeTree value) {
1233 CodeTreeBuilder builder = new CodeTreeBuilder(parent);
1234 if (Utils.isAssignable(getContext(), type, getContext().getTruffleTypes().getNode())) {
1235 builder.string("adoptChild(").tree(value).string(")");
1236 } else if (Utils.isAssignable(getContext(), type, getContext().getTruffleTypes().getNodeArray())) {
1237 builder.string("adoptChildren(").tree(value).string(")");
1238 } else {
1239 builder.tree(value);
1240 }
1241 return builder.getRoot();
1242 }
1243
1244 private CodeExecutableElement createCopyConstructor(CodeTypeElement type, ExecutableElement superConstructor, ExecutableElement sourceSectionConstructor) { 1231 private CodeExecutableElement createCopyConstructor(CodeTypeElement type, ExecutableElement superConstructor, ExecutableElement sourceSectionConstructor) {
1245 CodeExecutableElement method = new CodeExecutableElement(null, type.getSimpleName().toString()); 1232 CodeExecutableElement method = new CodeExecutableElement(null, type.getSimpleName().toString());
1246 CodeTreeBuilder builder = method.createBuilder(); 1233 CodeTreeBuilder builder = method.createBuilder();
1247 method.getParameters().add(new CodeVariableElement(type.asType(), "copy")); 1234 method.getParameters().add(new CodeVariableElement(type.asType(), "copy"));
1248 1235
1259 1246
1260 String copyAccess = "copy." + varName; 1247 String copyAccess = "copy." + varName;
1261 if (Utils.isAssignable(getContext(), varType, getContext().getTruffleTypes().getNodeArray())) { 1248 if (Utils.isAssignable(getContext(), varType, getContext().getTruffleTypes().getNodeArray())) {
1262 copyAccess += ".clone()"; 1249 copyAccess += ".clone()";
1263 } 1250 }
1264 CodeTree init = createAdoptChild(builder, varType, CodeTreeBuilder.singleString(copyAccess)); 1251 CodeTree init = CodeTreeBuilder.singleString(copyAccess);
1265 builder.startStatement().string("this.").string(varName).string(" = ").tree(init).end(); 1252 builder.startStatement().string("this.").string(varName).string(" = ").tree(init).end();
1266 } 1253 }
1267 1254
1268 return method; 1255 return method;
1269 } 1256 }
2642 CodeTreeBuilder builder = superConstructor.createBuilder(); 2629 CodeTreeBuilder builder = superConstructor.createBuilder();
2643 builder.tree(body); 2630 builder.tree(body);
2644 2631
2645 if (node.isPolymorphic()) { 2632 if (node.isPolymorphic()) {
2646 if (specialization.isSpecialized() || specialization.isPolymorphic()) { 2633 if (specialization.isSpecialized() || specialization.isPolymorphic()) {
2647 builder.statement("this.next0 = adoptChild(copy.next0)"); 2634 builder.statement("this.next0 = copy.next0");
2648 } 2635 }
2649 } 2636 }
2650 if (superConstructor != null) { 2637 if (superConstructor != null) {
2651 for (ActualParameter param : getImplicitTypeParamters(getModel())) { 2638 for (ActualParameter param : getImplicitTypeParamters(getModel())) {
2652 clazz.add(new CodeVariableElement(modifiers(PRIVATE, FINAL), getContext().getType(Class.class), implicitTypeName(param))); 2639 clazz.add(new CodeVariableElement(modifiers(PRIVATE, FINAL), getContext().getType(Class.class), implicitTypeName(param)));