changeset 20952:833e088ee7d3

Truffle-DSL: fixed invalid execute delegation
author Christian Humer <christian.humer@gmail.com>
date Tue, 14 Apr 2015 19:41:36 +0200
parents a77b760a0307
children c0455554d45b
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java
diffstat 5 files changed, 11 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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<TypeMirror> 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<TypeMirror> typesIterator = types.iterator();
+        TypeMirror prev = typesIterator.next();
+        while (typesIterator.hasNext()) {
+            prev = getCommonSuperType(context, prev, typesIterator.next());
         }
         return prev;
     }
--- 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<TypeMirror> 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;
                 }
             }
--- 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<TypeMirror> getPossibleReturnTypes() {
         List<TypeMirror> 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;
         }
--- 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);
         }
     }