# HG changeset patch # User Christian Humer # Date 1377875185 -7200 # Node ID ff41fd80d562254992defbdf70b3bbdafb613c00 # Parent cb364a90ef62b3a9d023f52e7008cae8a869843f# Parent 60937d54db2edd6d6cbfb13def4c0461e1626437 Merge. diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java Fri Aug 30 17:06:25 2013 +0200 @@ -27,6 +27,7 @@ import com.oracle.truffle.api.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestElseConnectionBug1Factory; +import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestElseConnectionBug2Factory; import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestGroupingFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.SimpleTypes; import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; @@ -200,6 +201,39 @@ } + @Test + public void testElseConnectionBug2() { + TestHelper.assertRuns(TestElseConnectionBug2Factory.getInstance(), 42, TestHelper.array(42)); + } + + @SuppressWarnings("unused") + @NodeChild + public abstract static class TestElseConnectionBug2 extends ValueNode { + + @Specialization(order = 2, guards = "guard0") + public int doGuard0(int value) { + throw new AssertionError(); + } + + @Specialization(order = 3, guards = "guard1") + public int doGuard1(int value) { + throw new AssertionError(); + } + + @Specialization(order = 4, guards = "!guard0") + public int doUninitialized(int value) { + return value; + } + + boolean guard0(int value) { + return false; + } + + boolean guard1(int value) { + return false; + } + } + private static class MockAssumption implements Assumption { int checked; diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java Fri Aug 30 17:06:25 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 { + + } + } diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java Fri Aug 30 17:06:25 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") diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java Fri Aug 30 17:06:25 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 parseChildren(List elements, final List typeHierarchy) { + private List parseChildren(NodeData node, List elements, final List typeHierarchy) { Set 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 (!Utils.typeEquals(fieldNodeData.getTypeSystem().getTemplateType().asType(), (node.getTypeSystem().getTemplateType().asType()))) { + 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) { diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/SpecializationGroup.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/SpecializationGroup.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/SpecializationGroup.java Fri Aug 30 17:06:25 2013 +0200 @@ -110,17 +110,18 @@ } private GuardData findNegatedGuardInPrevious(GuardData guard) { - SpecializationGroup previous = this; - while ((previous = previous.getPreviousGroup()) != null) { - List elseConnectedGuards = previous.getElseConnectableGuards(); + SpecializationGroup previous = this.getPreviousGroup(); + if (previous == null) { + return null; + } + List elseConnectedGuards = previous.getElseConnectableGuards(); - if (previous == null || previous.getGuards().size() != elseConnectedGuards.size() + 1) { - return null; - } - GuardData previousGuard = previous.getGuards().get(elseConnectedGuards.size()); - if (guard.getMethod().equals(previousGuard.getMethod()) && guard.isNegated() != previousGuard.isNegated()) { - return guard; - } + if (previous == null || previous.getGuards().size() != elseConnectedGuards.size() + 1) { + return null; + } + GuardData previousGuard = previous.getGuards().get(elseConnectedGuards.size()); + if (guard.getMethod().equals(previousGuard.getMethod()) && guard.isNegated() != previousGuard.isNegated()) { + return guard; } return null; } diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/Template.java Fri Aug 30 17:06:25 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 extensionElements; - public Template(TypeElement templateType, String templateMethodName, AnnotationMirror annotation) { this.templateType = templateType; this.templateMethodName = templateMethodName; @@ -68,14 +65,6 @@ return annotation; } - public List getExtensionElements() { - return extensionElements; - } - - public void setExtensionElements(List extensionMethods) { - this.extensionElements = extensionMethods; - } - @Override public String toString() { return getClass().getSimpleName() + "[" + Utils.getSimpleName(getTemplateType()) + "]"; diff -r 60937d54db2e -r ff41fd80d562 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardData.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardData.java Fri Aug 30 15:05:54 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardData.java Fri Aug 30 17:06:25 2013 +0200 @@ -60,7 +60,7 @@ @Override public String toString() { - return getMethodName() + getParameters().toString(); + return (negated ? "!" : "") + getMethodName() + getParameters().toString(); } }