forked from JavaTX/JavaCompilerCore
modified: src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
modified: src/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java In compare wird die Gleichung a =. Theta neu gefiltert
This commit is contained in:
parent
0ae777b4ac
commit
5f8c73f176
@ -962,7 +962,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
Set<UnifyType> smaller_ext = smaller.stream().filter(x -> !(x instanceof ExtendsType) && !(x instanceof SuperType))
|
Set<UnifyType> smaller_ext = smaller.stream().filter(x -> !(x instanceof ExtendsType) && !(x instanceof SuperType))
|
||||||
.map(x -> {
|
.map(x -> {
|
||||||
//BinaryOperator<HashMap<PlaceholderType,PlaceholderType>> combiner = (aa,b) -> { aa.putAll(b); return aa;}; //Variablenumbenennung rausgenommen
|
//BinaryOperator<HashMap<PlaceholderType,PlaceholderType>> combiner = (aa,b) -> { aa.putAll(b); return aa;}; //Variablenumbenennung rausgenommen
|
||||||
//HashMap<PlaceholderType,PlaceholderType> hm = x.getInvolvedPlaceholderTypes().stream()
|
//HashMap<PlaceholderType,PlaceholderType> hm = x.getInvolvedPlaceholderTypes().stream() //Variablen muessen wahrscheinlich erhalten bleiben
|
||||||
// .reduce(new HashMap<PlaceholderType,PlaceholderType>(),
|
// .reduce(new HashMap<PlaceholderType,PlaceholderType>(),
|
||||||
// (aa, b)-> { aa.put(b,PlaceholderType.freshPlaceholder()); return aa; }, combiner);
|
// (aa, b)-> { aa.put(b,PlaceholderType.freshPlaceholder()); return aa; }, combiner);
|
||||||
return new ExtendsType (x);})//.accept(new freshPlaceholder(), hm));}
|
return new ExtendsType (x);})//.accept(new freshPlaceholder(), hm));}
|
||||||
|
@ -26,6 +26,11 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
public OrderingUnifyPair(IFiniteClosure fc) {
|
public OrderingUnifyPair(IFiniteClosure fc) {
|
||||||
this.fc = fc;
|
this.fc = fc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vergleicht Paare (a =. Theta) und (a =. Theta')
|
||||||
|
* in dem compare(Theta, Theta') aufgerufen wird.
|
||||||
|
*/
|
||||||
public int compareEq (UnifyPair left, UnifyPair right) {
|
public int compareEq (UnifyPair left, UnifyPair right) {
|
||||||
if (left.getRhsType() instanceof WildcardType || right.getRhsType() instanceof WildcardType) {
|
if (left.getRhsType() instanceof WildcardType || right.getRhsType() instanceof WildcardType) {
|
||||||
return fc.compare(left.getRhsType(), right.getRhsType(), PairOperator.SMALLERDOTWC);
|
return fc.compare(left.getRhsType(), right.getRhsType(), PairOperator.SMALLERDOTWC);
|
||||||
@ -135,10 +140,13 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
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("D"))
|
if (lefteq.iterator().next().getLhsType().getName().equals("D"))
|
||||||
System.out.print("");
|
System.out.print("");
|
||||||
Set<PlaceholderType> varsleft = lefteq.stream().map(x -> (PlaceholderType)x.getLhsType()).collect(Collectors.toCollection(HashSet::new));
|
//Set<PlaceholderType> varsleft = lefteq.stream().map(x -> (PlaceholderType)x.getLhsType()).collect(Collectors.toCollection(HashSet::new));
|
||||||
Set<PlaceholderType> varsright = righteq.stream().map(x -> (PlaceholderType)x.getLhsType()).collect(Collectors.toCollection(HashSet::new));
|
//Set<PlaceholderType> varsright = righteq.stream().map(x -> (PlaceholderType)x.getLhsType()).collect(Collectors.toCollection(HashSet::new));
|
||||||
lefteq.removeIf(x -> !varsright.contains(x.getLhsType()));
|
//filtern des Paares a = Theta, das durch a <. Thata' generiert wurde (nur im Fall 1 relevant)
|
||||||
righteq.removeIf(x -> !varsleft.contains(x.getLhsType()));
|
lefteq.removeIf(x -> !(x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||||
|
||x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName())));//removeIf(x -> !varsright.contains(x.getLhsType()));
|
||||||
|
righteq.removeIf(x -> !(x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||||
|
||x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName())));//.removeIf(x -> !varsleft.contains(x.getLhsType()));
|
||||||
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 (lseq.getRhsType().getName().equals("Object")) {
|
||||||
|
Loading…
Reference in New Issue
Block a user