# HG changeset patch # User Christian Humer # Date 1365433375 -7200 # Node ID 216dce75d5ac7a7785027ded607301fc2ab67a19 # Parent 77c17c97f713e307e70d619a8f007ea86d7b8133# Parent 2c0c708a0ad64334a32eabaaf14f3cdaea2adcef Merge. diff -r 2c0c708a0ad6 -r 216dce75d5ac graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/BinaryNodeTest.java --- a/graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/BinaryNodeTest.java Mon Apr 08 09:26:06 2013 +0200 +++ b/graal/com.oracle.truffle.api.codegen.test/src/com/oracle/truffle/api/codegen/test/BinaryNodeTest.java Mon Apr 08 17:02:55 2013 +0200 @@ -55,8 +55,8 @@ @Child protected ValueNode rightNode; public BinaryNode(ValueNode left, ValueNode right) { - this.leftNode = left; - this.rightNode = right; + this.leftNode = adoptChild(left); + this.rightNode = adoptChild(right); } public BinaryNode(BinaryNode prev) { diff -r 2c0c708a0ad6 -r 216dce75d5ac graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/AbstractParser.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/AbstractParser.java Mon Apr 08 09:26:06 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/AbstractParser.java Mon Apr 08 17:02:55 2013 +0200 @@ -27,6 +27,7 @@ import javax.annotation.processing.*; import javax.lang.model.element.*; +import javax.tools.Diagnostic.Kind; import com.oracle.truffle.codegen.processor.template.*; @@ -49,6 +50,7 @@ public final M parse(RoundEnvironment env, Element element) { this.roundEnv = env; + M model = null; try { AnnotationMirror mirror = null; if (getAnnotationType() != null) { @@ -58,13 +60,16 @@ if (!context.getTruffleTypes().verify(context, element, mirror)) { return null; } - M model = parse(element, mirror); + model = parse(element, mirror); if (model == null) { return null; } model.emitMessages((TypeElement) element, log); return filterErrorElements(model); + } catch (CompileErrorException e) { + log.message(Kind.WARNING, element, null, null, "The truffle processor could not parse class due to error: %s", e.getMessage()); + return null; } finally { this.roundEnv = null; } diff -r 2c0c708a0ad6 -r 216dce75d5ac graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/Utils.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/Utils.java Mon Apr 08 09:26:06 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/Utils.java Mon Apr 08 17:02:55 2013 +0200 @@ -210,6 +210,8 @@ return b.toString(); case TYPEVAR: return "Any"; + case ERROR: + throw new CompileErrorException("Type error " + mirror); default: throw new RuntimeException("Unknown type specified " + mirror.getKind() + " mirror: " + mirror); } @@ -247,6 +249,8 @@ return getWildcardName((WildcardType) mirror); case TYPEVAR: return "?"; + case ERROR: + throw new CompileErrorException("Type error " + mirror); default: throw new RuntimeException("Unknown type specified " + mirror.getKind() + " mirror: " + mirror); } @@ -313,6 +317,8 @@ return "void"; case TYPEVAR: return getSimpleName(mirror); + case ERROR: + throw new CompileErrorException("Type error " + mirror); default: throw new RuntimeException("Unknown type specified " + mirror + " mirror: " + mirror); } diff -r 2c0c708a0ad6 -r 216dce75d5ac graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java Mon Apr 08 09:26:06 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java Mon Apr 08 17:02:55 2013 +0200 @@ -365,9 +365,13 @@ needsId.add(specialization); } } - List ids = calculateSpecializationIds(needsId); - for (int i = 0; i < ids.size(); i++) { - needsId.get(i).setId(ids.get(i)); + + // verify specialization parameter length + if (verifySpecializationParameters(node)) { + List ids = calculateSpecializationIds(needsId); + for (int i = 0; i < ids.size(); i++) { + needsId.get(i).setId(ids.get(i)); + } } } @@ -509,9 +513,6 @@ } private void verifyNode(NodeData nodeData) { - // verify specialization parameter length - verifySpecializationParameters(nodeData); - // verify order is not ambiguous verifySpecializationOrder(nodeData); @@ -521,14 +522,6 @@ verifyConstructors(nodeData); -// if (!verifyNamingConvention(specializations, "do")) { -// return null; -// } -// -// if (!verifyNamesUnique(specializations)) { -// return null; -// } - verifyNamingConvention(nodeData.getShortCircuits(), "needs"); verifySpecializationThrows(nodeData); @@ -565,7 +558,7 @@ return nodeData; } - private static void verifySpecializationParameters(NodeData nodeData) { + private static boolean verifySpecializationParameters(NodeData nodeData) { boolean valid = true; int args = -1; for (SpecializationData specializationData : nodeData.getSpecializations()) { @@ -586,6 +579,7 @@ specialization.addError("All specializations must have the same number of arguments."); } } + return valid; } private void verifyMissingAbstractMethods(NodeData nodeData) { diff -r 2c0c708a0ad6 -r 216dce75d5ac graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java Mon Apr 08 09:26:06 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java Mon Apr 08 17:02:55 2013 +0200 @@ -144,7 +144,9 @@ public List getReturnTypeAndParameters() { List allParameters = new ArrayList<>(getParameters().size() + 1); - allParameters.add(getReturnType()); + if (getReturnType() != null) { + allParameters.add(getReturnType()); + } allParameters.addAll(getParameters()); return Collections.unmodifiableList(allParameters); }