# HG changeset patch # User Christian Humer # Date 1429033296 -7200 # Node ID 833e088ee7d3514438db8f618e1ebb1b00d6ee88 # Parent a77b760a0307490f76a134683264e93b7394794c Truffle-DSL: fixed invalid execute delegation diff -r a77b760a0307 -r 833e088ee7d3 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Tue Apr 14 19:41:36 2015 +0200 @@ -152,7 +152,7 @@ } prev = child.getNodeType(); } - TypeMirror commonNodeSuperType = ElementUtils.getCommonSuperType(context, nodeTypesList.toArray(new TypeMirror[nodeTypesList.size()])); + TypeMirror commonNodeSuperType = ElementUtils.getCommonSuperType(context, nodeTypesList); Types types = context.getEnvironment().getTypeUtils(); TypeMirror factoryType = context.getType(NodeFactory.class); diff -r a77b760a0307 -r 833e088ee7d3 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Tue Apr 14 19:41:36 2015 +0200 @@ -147,13 +147,14 @@ return result; } - public static TypeMirror getCommonSuperType(ProcessorContext context, TypeMirror[] types) { - if (types.length == 0) { + public static TypeMirror getCommonSuperType(ProcessorContext context, Collection types) { + if (types.isEmpty()) { return context.getType(Object.class); } - TypeMirror prev = types[0]; - for (int i = 1; i < types.length; i++) { - prev = getCommonSuperType(context, prev, types[i]); + Iterator typesIterator = types.iterator(); + TypeMirror prev = typesIterator.next(); + while (typesIterator.hasNext()) { + prev = getCommonSuperType(context, prev, typesIterator.next()); } return prev; } diff -r a77b760a0307 -r 833e088ee7d3 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java Tue Apr 14 19:41:36 2015 +0200 @@ -194,13 +194,8 @@ if (i < node.getChildExecutions().size()) { List genericTypes = node.getGenericTypes(node.getChildExecutions().get(i)); - boolean typeFound = false; - for (TypeMirror generic : genericTypes) { - if (isSubtypeBoxed(context, generic, delegateToParameter)) { - typeFound = true; - } - } - if (!typeFound) { + TypeMirror genericType = ElementUtils.getCommonSuperType(context, genericTypes); + if (!isSubtypeBoxed(context, genericType, delegateToParameter)) { return false; } } diff -r a77b760a0307 -r 833e088ee7d3 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java Tue Apr 14 19:41:36 2015 +0200 @@ -60,7 +60,7 @@ protected Collection getPossibleReturnTypes() { List possibleTypes = getNode().getGenericTypes(getNode().getThisExecution()); if (possibleTypes.size() > 1) { - return Arrays.asList(ElementUtils.getCommonSuperType(getContext(), possibleTypes.toArray(new TypeMirror[0]))); + return Arrays.asList(ElementUtils.getCommonSuperType(getContext(), possibleTypes)); } else { return possibleTypes; } diff -r a77b760a0307 -r 833e088ee7d3 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Tue Apr 14 19:41:36 2015 +0200 @@ -1293,7 +1293,7 @@ if (allowedTypes.size() == 1) { return allowedTypes.iterator().next(); } else { - return ElementUtils.getCommonSuperType(context, allowedTypes.toArray(new TypeMirror[allowedTypes.size()])); + return ElementUtils.getCommonSuperType(context, allowedTypes); } }