forked from JavaTX/JavaCompilerCore
modified: src/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java
compare(Matrix, Vector<gen_ab>, ? extends Vector<? extends Integer>> <.? gen_ab eingefuegt.
This commit is contained in:
parent
0315a1f144
commit
95943b1627
@ -123,8 +123,18 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
}
|
}
|
||||||
//Fall 1 und 4
|
//Fall 1 und 4
|
||||||
if (lefteq.size() == 1 && righteq.size() == 1 && (leftlewc.size() > 0 || rightlewc.size() > 0)) {
|
if (lefteq.size() == 1 && righteq.size() == 1 && (leftlewc.size() > 0 || rightlewc.size() > 0)) {
|
||||||
|
if (lefteq.iterator().next().getLhsType().getName().equals("A"))
|
||||||
|
System.out.print("");
|
||||||
UnifyPair lseq = lefteq.iterator().next();
|
UnifyPair lseq = lefteq.iterator().next();
|
||||||
UnifyPair rseq = righteq.iterator().next();
|
UnifyPair rseq = righteq.iterator().next();
|
||||||
|
if (lseq.getRhsType().getName().equals("Object")) {
|
||||||
|
if (rseq.getRhsType().getName().equals("Object")) return 0;
|
||||||
|
else return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (rseq.getRhsType().getName().equals("Object")) return -1;
|
||||||
|
}
|
||||||
|
if (leftlewc.size() == rightlewc.size()) {
|
||||||
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.getRhsType(), rseq.getRhsType());
|
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.getRhsType(), rseq.getRhsType());
|
||||||
Unifier uni = new Unifier();
|
Unifier uni = new Unifier();
|
||||||
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
||||||
@ -152,7 +162,33 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
if (!si.isPresent()) return 0;
|
if (!si.isPresent()) return 0;
|
||||||
else return si.get();
|
else return si.get();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (leftlewc.size() > 0) {
|
||||||
|
Set<UnifyPair> subst;
|
||||||
|
if (leftlewc.iterator().next().getLhsType() instanceof PlaceholderType) {
|
||||||
|
subst = leftlewc.stream().map(x -> new UnifyPair(x.getLhsType(), x.getRhsType(), PairOperator.EQUALSDOT)).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
subst = leftlewc.stream().map(x -> new UnifyPair(x.getRhsType(), x.getLhsType(), PairOperator.EQUALSDOT)).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
}
|
||||||
|
Unifier uni = new Unifier();
|
||||||
|
subst.stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
||||||
|
lseq = uni.apply(lseq);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Set<UnifyPair> subst;
|
||||||
|
if (rightlewc.iterator().next().getLhsType() instanceof PlaceholderType) {
|
||||||
|
subst = rightlewc.stream().map(x -> new UnifyPair(x.getLhsType(), x.getRhsType(), PairOperator.EQUALSDOT)).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
subst = rightlewc.stream().map(x -> new UnifyPair(x.getRhsType(), x.getLhsType(), PairOperator.EQUALSDOT)).collect(Collectors.toCollection(HashSet::new));
|
||||||
|
}
|
||||||
|
Unifier uni = new Unifier();
|
||||||
|
subst.stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
||||||
|
rseq = uni.apply(rseq);
|
||||||
|
}
|
||||||
|
return compareEq(lseq, rseq);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user