Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java @ 19282:ae81dd154fb6
Truffle-DSL: remove old DSL layout; Make new layout the default.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Thu, 22 Jan 2015 20:44:24 +0100 |
parents | d2ec5f50dcd0 |
children | 08aa0372dad4 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Thu Jan 22 20:42:48 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Thu Jan 22 20:44:24 2015 +0100 @@ -695,18 +695,13 @@ initializeReachability(node); initializeContains(node); - if (!node.hasErrors() && !node.getTypeSystem().getOptions().useNewLayout()) { - initializeExceptions(node); - } resolveContains(node); - if (node.getTypeSystem().getOptions().useNewLayout()) { - List<SpecializationData> specializations = node.getSpecializations(); - for (SpecializationData cur : specializations) { - for (SpecializationData child : specializations) { - if (child != null && child != cur && child.getContains().contains(cur)) { - cur.getExcludedBy().add(child); - } + List<SpecializationData> specializations = node.getSpecializations(); + for (SpecializationData cur : specializations) { + for (SpecializationData child : specializations) { + if (child != null && child != cur && child.getContains().contains(cur)) { + cur.getExcludedBy().add(child); } } } @@ -763,40 +758,6 @@ } } - private static void initializeExceptions(NodeData node) { - List<SpecializationData> specializations = node.getSpecializations(); - - for (int i = 0; i < specializations.size(); i++) { - SpecializationData cur = specializations.get(i); - if (cur.getExceptions().isEmpty()) { - continue; - } - SpecializationData next = i + 1 < specializations.size() ? specializations.get(i + 1) : null; - - if (!cur.isContainedBy(next)) { - next.addError("This specialiation is not a valid exceptional rewrite target for %s. To fix this make %s compatible to %s or remove the exceptional rewrite.", - cur.createReferenceName(), next != null ? next.createReferenceName() : "-", cur.createReferenceName()); - continue; - } - Set<SpecializationData> nextContains = next != null ? next.getContains() : Collections.<SpecializationData> emptySet(); - if (!nextContains.contains(cur)) { - nextContains.add(cur); - } - } - - for (SpecializationData cur : specializations) { - if (cur.getExceptions().isEmpty()) { - continue; - } - for (SpecializationData child : specializations) { - if (child != null && child != cur && child.getContains().contains(cur)) { - cur.getExcludedBy().add(child); - } - } - } - - } - private static void initializeContains(NodeData node) { for (SpecializationData specialization : node.getSpecializations()) { Set<SpecializationData> resolvedSpecializations = specialization.getContains(); @@ -1392,62 +1353,22 @@ } } - private void verifyConstructors(NodeData nodeData) { - if (nodeData.getTypeSystem().getOptions().useNewLayout()) { - List<ExecutableElement> constructors = ElementFilter.constructorsIn(nodeData.getTemplateType().getEnclosedElements()); - if (constructors.isEmpty()) { - return; - } - - boolean oneNonPrivate = false; - for (ExecutableElement constructor : constructors) { - if (ElementUtils.getVisibility(constructor.getModifiers()) != Modifier.PRIVATE) { - oneNonPrivate = true; - break; - } - } - if (!oneNonPrivate && !nodeData.getTemplateType().getModifiers().contains(Modifier.PRIVATE)) { - nodeData.addError("At least one constructor must be non-private."); - } - return; - } - if (!nodeData.needsRewrites(context)) { - // no specialization constructor is needed if the node never rewrites. + private static void verifyConstructors(NodeData nodeData) { + List<ExecutableElement> constructors = ElementFilter.constructorsIn(nodeData.getTemplateType().getEnclosedElements()); + if (constructors.isEmpty()) { return; } - TypeElement type = ElementUtils.fromTypeMirror(nodeData.getNodeType()); - List<ExecutableElement> constructors = ElementFilter.constructorsIn(type.getEnclosedElements()); - - boolean parametersFound = false; + boolean oneNonPrivate = false; for (ExecutableElement constructor : constructors) { - if (!constructor.getParameters().isEmpty() && !isSourceSectionConstructor(context, constructor)) { - parametersFound = true; + if (ElementUtils.getVisibility(constructor.getModifiers()) != Modifier.PRIVATE) { + oneNonPrivate = true; + break; } } - if (!parametersFound) { - return; + if (!oneNonPrivate && !nodeData.getTemplateType().getModifiers().contains(Modifier.PRIVATE)) { + nodeData.addError("At least one constructor must be non-private."); } - for (ExecutableElement e : constructors) { - if (e.getParameters().size() == 1) { - TypeMirror firstArg = e.getParameters().get(0).asType(); - if (ElementUtils.typeEquals(firstArg, nodeData.getNodeType())) { - if (e.getModifiers().contains(Modifier.PRIVATE)) { - nodeData.addError("The specialization constructor must not be private."); - } else if (constructors.size() <= 1) { - nodeData.addError("The specialization constructor must not be the only constructor. The definition of an alternative constructor is required."); - } - return; - } - } - } - - // not found - nodeData.addError("Specialization constructor '%s(%s previousNode) { this(...); }' is required.", ElementUtils.getSimpleName(type), ElementUtils.getSimpleName(type)); - } - - public static boolean isSourceSectionConstructor(ProcessorContext context, ExecutableElement constructor) { - return constructor.getParameters().size() == 1 && ElementUtils.typeEquals(constructor.getParameters().get(0).asType(), context.getTruffleTypes().getSourceSection()); } private AnnotationMirror findFirstAnnotation(List<? extends Element> elements, Class<? extends Annotation> annotation) {