diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java @ 20938:18c0f02fa4d2

Truffle-DSL: make type systems optional.
author Christian Humer <christian.humer@gmail.com>
date Tue, 14 Apr 2015 15:12:48 +0200
parents 62c43fcf5be2
children 476374f3fe9a
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Tue Apr 14 22:12:03 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Tue Apr 14 15:12:48 2015 +0200
@@ -228,9 +228,9 @@
 
     public TypeSignature getTypeSignature() {
         TypeSignature signature = new TypeSignature();
-        signature.types.add(getReturnType().getTypeSystemType());
+        signature.types.add(getReturnType().getType());
         for (Parameter parameter : getSignatureParameters()) {
-            TypeData typeData = parameter.getTypeSystemType();
+            TypeMirror typeData = parameter.getType();
             if (typeData != null) {
                 signature.types.add(typeData);
             }
@@ -250,8 +250,8 @@
             if (signatureIndex >= signature.size()) {
                 break;
             }
-            TypeData newType = signature.get(signatureIndex++);
-            if (!parameter.getTypeSystemType().equals(newType)) {
+            TypeMirror newType = signature.get(signatureIndex++);
+            if (!ElementUtils.typeEquals(newType, parameter.getType())) {
                 replaceParameter(parameter.getLocalName(), new Parameter(parameter, newType));
             }
         }
@@ -278,11 +278,6 @@
     }
 
     public int compareBySignature(TemplateMethod compareMethod) {
-        final TypeSystemData typeSystem = getTemplate().getTypeSystem();
-        if (typeSystem != compareMethod.getTemplate().getTypeSystem()) {
-            throw new IllegalStateException("Cannot compare two methods with different type systems.");
-        }
-
         List<TypeMirror> signature1 = getSignatureTypes(this);
         List<TypeMirror> signature2 = getSignatureTypes(compareMethod);
 
@@ -290,7 +285,7 @@
         for (int i = 0; i < Math.max(signature1.size(), signature2.size()); i++) {
             TypeMirror t1 = i < signature1.size() ? signature1.get(i) : null;
             TypeMirror t2 = i < signature2.size() ? signature2.get(i) : null;
-            result = compareParameter(typeSystem, t1, t2);
+            result = ElementUtils.compareType(t1, t2);
             if (result != 0) {
                 break;
             }
@@ -299,37 +294,6 @@
         return result;
     }
 
-    protected static int compareParameter(TypeSystemData data, TypeMirror signature1, TypeMirror signature2) {
-        if (signature1 == null) {
-            return 1;
-        } else if (signature2 == null) {
-            return -1;
-        }
-
-        if (ElementUtils.typeEquals(signature1, signature2)) {
-            return 0;
-        }
-
-        int index1 = data.findType(signature1);
-        int index2 = data.findType(signature2);
-        if (index1 != -1 && index2 != -1) {
-            return index1 - index2;
-        }
-
-        // TODO this version if subclass of should be improved.
-        if (signature1.getKind() == TypeKind.DECLARED && signature2.getKind() == TypeKind.DECLARED) {
-            TypeElement element1 = ElementUtils.fromTypeMirror(signature1);
-            TypeElement element2 = ElementUtils.fromTypeMirror(signature2);
-
-            if (ElementUtils.getDirectSuperTypes(element1).contains(element2)) {
-                return -1;
-            } else if (ElementUtils.getDirectSuperTypes(element2).contains(element1)) {
-                return 1;
-            }
-        }
-        return ElementUtils.getSimpleName(signature1).compareTo(ElementUtils.getSimpleName(signature2));
-    }
-
     public static List<TypeMirror> getSignatureTypes(TemplateMethod method) {
         List<TypeMirror> types = new ArrayList<>();
         for (Parameter param : method.getSignatureParameters()) {
@@ -338,15 +302,15 @@
         return types;
     }
 
-    public static class TypeSignature implements Iterable<TypeData>, Comparable<TypeSignature> {
+    public static class TypeSignature implements Iterable<TypeMirror> {
 
-        private final List<TypeData> types;
+        private final List<TypeMirror> types;
 
         public TypeSignature() {
             this.types = new ArrayList<>();
         }
 
-        public TypeSignature(List<TypeData> signature) {
+        public TypeSignature(List<TypeMirror> signature) {
             this.types = signature;
         }
 
@@ -359,32 +323,10 @@
             return types.size();
         }
 
-        public TypeData get(int index) {
+        public TypeMirror get(int index) {
             return types.get(index);
         }
 
-        public int compareTo(TypeSignature other) {
-            if (this == other) {
-                return 0;
-            } else if (types.size() != other.types.size()) {
-                return types.size() - other.types.size();
-            } else if (types.isEmpty()) {
-                return 0;
-            }
-
-            for (int i = 0; i < types.size(); i++) {
-                TypeData type1 = types.get(i);
-                TypeData type2 = other.types.get(i);
-
-                int comparison = type1.compareTo(type2);
-                if (comparison != 0) {
-                    return comparison;
-                }
-            }
-
-            return 0;
-        }
-
         @Override
         public boolean equals(Object obj) {
             if (obj instanceof TypeSignature) {
@@ -393,7 +335,7 @@
             return super.equals(obj);
         }
 
-        public Iterator<TypeData> iterator() {
+        public Iterator<TypeMirror> iterator() {
             return types.iterator();
         }