changeset 7752:388848bbe03d

Fixed resolve of generic execute type.
author Christian Humer <christian.humer@gmail.com>
date Fri, 08 Feb 2013 16:23:11 +0100
parents ef1b41ea0a90
children c17ee8823d72
files graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java
diffstat 1 files changed, 16 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Fri Feb 08 16:07:33 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Fri Feb 08 16:23:11 2013 +0100
@@ -130,20 +130,25 @@
         List<ExecutableTypeData> types = findGenericExecutableTypes(context);
         if (types.size() == 1) {
             return types.get(0);
-        } else {
-            ExecutableTypeData execType = null;
-            for (ExecutableTypeData type : types) {
-                TypeData returnType = type.getReturnType().getActualTypeData(getTypeSystem());
-                if (!returnType.isVoid()) {
-                    if (execType != null) {
-                        // multiple generic types not allowed
-                        return null;
-                    }
-                    execType = type;
+        } else if (types.size() == 2) {
+            if (types.get(0).getType().isVoid()) {
+                return types.get(1);
+            } else if (types.get(1).getType().isVoid()) {
+                return types.get(0);
+            }
+        }
+
+        ExecutableTypeData execType = null;
+        for (ExecutableTypeData type : types) {
+            TypeData returnType = type.getReturnType().getActualTypeData(getTypeSystem());
+            if (returnType.isGeneric()) {
+                if (execType != null) {
+                    return null;
                 }
+                execType = type;
             }
-            return execType;
         }
+        return execType;
     }
 
     private List<ExecutableTypeData> findGenericExecutableTypes(ProcessorContext context) {