Mercurial > hg > graal-jvmci-8
changeset 11479:fce94b1d46f0
Truffle-DSL: fixed the @TypeSystem of child nodes were not checked for equality.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Fri, 30 Aug 2013 15:28:22 +0200 |
parents | 1ccb36a32f87 |
children | f33beed55ddc |
files | graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java |
diffstat | 4 files changed, 27 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java Fri Aug 30 13:26:45 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java Fri Aug 30 15:28:22 2013 +0200 @@ -23,6 +23,7 @@ package com.oracle.truffle.api.dsl.test; import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.*; public class TypeSystemErrorsTest { @@ -59,4 +60,11 @@ } + @TypeSystemReference(Types0.class) + @NodeChild + @ExpectError("The @TypeSystem of the node and the @TypeSystem of the @NodeChild does not match. Types0 != SimpleTypes. ") + abstract static class ErrorNode1 extends ValueNode { + + } + }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java Fri Aug 30 13:26:45 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java Fri Aug 30 15:28:22 2013 +0200 @@ -96,7 +96,7 @@ private static void handleThrowable(AnnotationProcessor generator, Throwable t, Element e) { String message = "Uncaught error in " + generator.getClass().getSimpleName() + " while processing " + e; - generator.getContext().getLog().message(Kind.ERROR, e, null, null, message + ": " + Utils.printException(t)); + generator.getContext().getEnvironment().getMessager().printMessage(Kind.ERROR, message + ": " + Utils.printException(t), e); } @SuppressWarnings("unchecked")
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java Fri Aug 30 13:26:45 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java Fri Aug 30 15:28:22 2013 +0200 @@ -334,7 +334,7 @@ nodeData.setFields(parseFields(typeHierarchy, elements)); parsedNodes.put(Utils.getQualifiedName(templateType), nodeData); // parseChildren invokes cyclic parsing. - nodeData.setChildren(parseChildren(elements, typeHierarchy)); + nodeData.setChildren(parseChildren(nodeData, elements, typeHierarchy)); nodeData.setExecutableTypes(groupExecutableTypes(new ExecutableTypeMethodParser(context, nodeData).parse(elements))); return nodeData; @@ -384,7 +384,7 @@ return fields; } - private List<NodeChildData> parseChildren(List<? extends Element> elements, final List<TypeElement> typeHierarchy) { + private List<NodeChildData> parseChildren(NodeData node, List<? extends Element> elements, final List<TypeElement> typeHierarchy) { Set<String> shortCircuits = new HashSet<>(); for (ExecutableElement method : ElementFilter.methodsIn(elements)) { AnnotationMirror mirror = Utils.findAnnotationMirror(processingEnv, method, ShortCircuit.class); @@ -462,8 +462,10 @@ nodeChild.setNode(fieldNodeData); if (fieldNodeData == null) { nodeChild.addError("Node type '%s' is invalid or not a valid Node.", Utils.getQualifiedName(childType)); + } else if (!fieldNodeData.getTypeSystem().equals(node.getTypeSystem())) { + nodeChild.addError("The @%s of the node and the @%s of the @%s does not match. %s != %s. ", TypeSystem.class.getSimpleName(), TypeSystem.class.getSimpleName(), + NodeChild.class.getSimpleName(), Utils.getSimpleName(node.getTypeSystem().getTemplateType()), Utils.getSimpleName(fieldNodeData.getTypeSystem().getTemplateType())); } - index++; } } @@ -1010,9 +1012,6 @@ for (TemplateMethod method : nodeData.getAllTemplateMethods()) { unusedElements.remove(method.getMethod()); } - if (nodeData.getExtensionElements() != null) { - unusedElements.removeAll(nodeData.getExtensionElements()); - } for (NodeFieldData field : nodeData.getFields()) { if (field.getGetter() != null) {
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java Fri Aug 30 13:26:45 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java Fri Aug 30 15:28:22 2013 +0200 @@ -27,7 +27,6 @@ import javax.lang.model.element.*; import com.oracle.truffle.dsl.processor.*; -import com.oracle.truffle.dsl.processor.api.element.*; import com.oracle.truffle.dsl.processor.typesystem.*; public abstract class Template extends MessageContainer { @@ -36,8 +35,6 @@ private final String templateMethodName; private final AnnotationMirror annotation; - private List<? extends WritableElement> extensionElements; - public Template(TypeElement templateType, String templateMethodName, AnnotationMirror annotation) { this.templateType = templateType; this.templateMethodName = templateMethodName; @@ -52,6 +49,19 @@ } @Override + public boolean equals(Object obj) { + if (obj instanceof Template) { + return Utils.typeEquals(getTemplateType().asType(), ((Template) obj).getTemplateType().asType()); + } + return false; + } + + @Override + public int hashCode() { + return templateType.hashCode(); + } + + @Override protected List<MessageContainer> findChildContainers() { return Collections.emptyList(); } @@ -68,14 +78,6 @@ return annotation; } - public List<? extends WritableElement> getExtensionElements() { - return extensionElements; - } - - public void setExtensionElements(List<? extends WritableElement> extensionMethods) { - this.extensionElements = extensionMethods; - } - @Override public String toString() { return getClass().getSimpleName() + "[" + Utils.getSimpleName(getTemplateType()) + "]";