changeset 20998:8e5f9310f3aa

Truffle-DSL: fixed wrong order for implicit casts.
author Christian Humer <christian.humer@gmail.com>
date Thu, 16 Apr 2015 21:29:56 +0200
parents 370dbf93f0ca
children ef2825da2e43
files 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/NodeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java
diffstat 4 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Thu Apr 16 20:08:18 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Thu Apr 16 21:29:56 2015 +0200
@@ -1172,10 +1172,14 @@
         }
     }
 
-    public static List<TypeMirror> sortTypes(List<TypeMirror> list) {
+    public static List<TypeMirror> sortTypes(List<TypeMirror> list, final boolean reverse) {
         Collections.sort(list, new Comparator<TypeMirror>() {
             public int compare(TypeMirror o1, TypeMirror o2) {
-                return compareType(o1, o2);
+                if (reverse) {
+                    return compareType(o2, o1);
+                } else {
+                    return compareType(o1, o2);
+                }
             }
         });
         return list;
@@ -1205,7 +1209,7 @@
         return ElementUtils.getSimpleName(signature1).compareTo(ElementUtils.getSimpleName(signature2));
     }
 
-    public static List<TypeMirror> uniqueSortedTypes(Collection<TypeMirror> types) {
+    public static List<TypeMirror> uniqueSortedTypes(Collection<TypeMirror> types, boolean reverse) {
         if (types.isEmpty()) {
             return new ArrayList<>(0);
         } else if (types.size() <= 1) {
@@ -1219,7 +1223,7 @@
         for (TypeMirror type : types) {
             sourceTypes.put(ElementUtils.getTypeId(type), type);
         }
-        return sortTypes(new ArrayList<>(sourceTypes.values()));
+        return sortTypes(new ArrayList<>(sourceTypes.values()), reverse);
     }
 
     public static int compareMethod(ExecutableElement method1, ExecutableElement method2) {
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java	Thu Apr 16 20:08:18 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java	Thu Apr 16 21:29:56 2015 +0200
@@ -593,7 +593,7 @@
             }
         }
 
-        return ElementUtils.uniqueSortedTypes(types);
+        return ElementUtils.uniqueSortedTypes(types, false);
     }
 
 }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Thu Apr 16 20:08:18 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Thu Apr 16 21:29:56 2015 +0200
@@ -158,7 +158,7 @@
         for (ImplicitCastData cast : getImplicitCasts()) {
             sourceTypes.add(cast.getTargetType());
         }
-        return ElementUtils.uniqueSortedTypes(sourceTypes);
+        return ElementUtils.uniqueSortedTypes(sourceTypes, true);
     }
 
     public List<TypeMirror> lookupSourceTypes(TypeMirror targetType) {
@@ -169,7 +169,7 @@
                 sourceTypes.add(cast.getSourceType());
             }
         }
-        return sourceTypes;
+        return ElementUtils.uniqueSortedTypes(sourceTypes, true);
     }
 
     public boolean isImplicitSubtypeOf(TypeMirror source, TypeMirror target) {
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java	Thu Apr 16 20:08:18 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java	Thu Apr 16 21:29:56 2015 +0200
@@ -1334,7 +1334,7 @@
         }
 
         if (!frameTypes.isEmpty()) {
-            frameTypes = ElementUtils.uniqueSortedTypes(frameTypes);
+            frameTypes = ElementUtils.uniqueSortedTypes(frameTypes, false);
             TypeMirror frameType;
             if (frameTypes.size() == 1) {
                 frameType = frameTypes.iterator().next();
@@ -1369,7 +1369,7 @@
                     }
                     usedTypes.add(parameter.getType());
                 }
-                usedTypes = ElementUtils.uniqueSortedTypes(usedTypes);
+                usedTypes = ElementUtils.uniqueSortedTypes(usedTypes, false);
 
                 if (usedTypes.size() == 1) {
                     polymorphicType = usedTypes.iterator().next();