Mercurial > hg > graal-compiler
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; |