comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java @ 11742:85b846b31690

Truffle-DSL: automatically generate copy constructor if super constructor expects only SourceSection parameter.
author Andreas Woess <andreas.woess@jku.at>
date Fri, 20 Sep 2013 16:30:18 +0200
parents 2fb276f5e3e9
children 29de278b7c1b
comparison
equal deleted inserted replaced
11735:9c9683970656 11742:85b846b31690
1050 TypeElement type = Utils.fromTypeMirror(nodeData.getNodeType()); 1050 TypeElement type = Utils.fromTypeMirror(nodeData.getNodeType());
1051 List<ExecutableElement> constructors = ElementFilter.constructorsIn(type.getEnclosedElements()); 1051 List<ExecutableElement> constructors = ElementFilter.constructorsIn(type.getEnclosedElements());
1052 1052
1053 boolean parametersFound = false; 1053 boolean parametersFound = false;
1054 for (ExecutableElement constructor : constructors) { 1054 for (ExecutableElement constructor : constructors) {
1055 if (!constructor.getParameters().isEmpty()) { 1055 if (!constructor.getParameters().isEmpty() && !isSourceSectionConstructor(context, constructor)) {
1056 parametersFound = true; 1056 parametersFound = true;
1057 } 1057 }
1058 } 1058 }
1059 if (!parametersFound) { 1059 if (!parametersFound) {
1060 return; 1060 return;
1073 } 1073 }
1074 } 1074 }
1075 1075
1076 // not found 1076 // not found
1077 nodeData.addError("Specialization constructor '%s(%s previousNode) { this(...); }' is required.", Utils.getSimpleName(type), Utils.getSimpleName(type)); 1077 nodeData.addError("Specialization constructor '%s(%s previousNode) { this(...); }' is required.", Utils.getSimpleName(type), Utils.getSimpleName(type));
1078 }
1079
1080 static boolean isSourceSectionConstructor(ProcessorContext context, ExecutableElement constructor) {
1081 return constructor.getParameters().size() == 1 && constructor.getParameters().get(0).asType().equals(context.getTruffleTypes().getSourceSection());
1078 } 1082 }
1079 1083
1080 private static boolean verifySpecializationParameters(NodeData nodeData) { 1084 private static boolean verifySpecializationParameters(NodeData nodeData) {
1081 boolean valid = true; 1085 boolean valid = true;
1082 int args = -1; 1086 int args = -1;