Mercurial > hg > graal-jvmci-8
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))); |