Mercurial > hg > graal-jvmci-8
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(); }