forked from JavaTX/JavaCompilerCore
modified: ../../../../main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
Reigenfolge der der nextSets angepasst
This commit is contained in:
parent
44368f2a2a
commit
21bc3e5193
@ -1765,6 +1765,7 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
* (as in case 1 where sigma is added to the innermost set).
|
* (as in case 1 where sigma is added to the innermost set).
|
||||||
*/
|
*/
|
||||||
protected Set<Set<Set<Set<UnifyPair>>>> calculatePairSets(Set<UnifyPair> eq2s, List<Set<Set<UnifyPair>>> oderConstraintsInput, IFiniteClosure fc, Set<UnifyPair> undefined, List<Set<Set<UnifyPair>>> oderConstraintsOutput) {
|
protected Set<Set<Set<Set<UnifyPair>>>> calculatePairSets(Set<UnifyPair> eq2s, List<Set<Set<UnifyPair>>> oderConstraintsInput, IFiniteClosure fc, Set<UnifyPair> undefined, List<Set<Set<UnifyPair>>> oderConstraintsOutput) {
|
||||||
|
writeLog("eq2s: " + eq2s.toString());
|
||||||
oderConstraintsOutput.addAll(oderConstraintsInput);
|
oderConstraintsOutput.addAll(oderConstraintsInput);
|
||||||
List<Set<Set<Set<UnifyPair>>>> result = new ArrayList<>(9);
|
List<Set<Set<Set<UnifyPair>>>> result = new ArrayList<>(9);
|
||||||
|
|
||||||
@ -1774,17 +1775,30 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
|
|
||||||
ArrayList<UnifyPair> eq2sprime = new ArrayList<>(eq2s);
|
ArrayList<UnifyPair> eq2sprime = new ArrayList<>(eq2s);
|
||||||
Iterator<UnifyPair> eq2sprimeit = eq2sprime.iterator();
|
Iterator<UnifyPair> eq2sprimeit = eq2sprime.iterator();
|
||||||
|
ArrayList<UnifyPair> eq2sAsListFst = new ArrayList<>();
|
||||||
|
ArrayList<UnifyPair> eq2sAsListSnd = new ArrayList<>();
|
||||||
|
ArrayList<UnifyPair> eq2sAsListBack = new ArrayList<>();
|
||||||
ArrayList<UnifyPair> eq2sAsList = new ArrayList<>();
|
ArrayList<UnifyPair> eq2sAsList = new ArrayList<>();
|
||||||
Boolean first = true;
|
Boolean first = true;
|
||||||
while(eq2sprimeit.hasNext()) {// alle mit Variance != 0 nach vorne schieben
|
while(eq2sprimeit.hasNext()) {// alle mit Variance != 0 nach vorne schieben
|
||||||
UnifyPair up = eq2sprimeit.next();
|
UnifyPair up = eq2sprimeit.next();
|
||||||
if ((up.getLhsType() instanceof PlaceholderType && ((PlaceholderType)up.getLhsType()).getVariance() != 0)
|
if ((up.getLhsType() instanceof PlaceholderType && ((PlaceholderType)up.getLhsType()).getVariance() != 0 && !((PlaceholderType)up.getLhsType()).isInnerType())
|
||||||
|| (up.getRhsType() instanceof PlaceholderType && ((PlaceholderType)up.getRhsType()).getVariance() != 0)) {
|
|| (up.getRhsType() instanceof PlaceholderType && ((PlaceholderType)up.getRhsType()).getVariance() != 0) && !((PlaceholderType)up.getRhsType()).isInnerType()) {
|
||||||
eq2sAsList.add(up);
|
eq2sAsListFst.add(up);
|
||||||
|
eq2s.remove(up);
|
||||||
|
}
|
||||||
|
else if ((up.getLhsType() instanceof PlaceholderType && ((PlaceholderType)up.getLhsType()).getVariance() != 0 && ((PlaceholderType)up.getLhsType()).isInnerType())
|
||||||
|
|| (up.getRhsType() instanceof PlaceholderType && ((PlaceholderType)up.getRhsType()).getVariance() != 0) && ((PlaceholderType)up.getRhsType()).isInnerType()) {
|
||||||
|
eq2sAsListSnd.add(up);
|
||||||
|
eq2s.remove(up);
|
||||||
|
}
|
||||||
|
else if ((up.getLhsType() instanceof PlaceholderType && ((PlaceholderType)up.getLhsType()).isInnerType())
|
||||||
|
|| (up.getRhsType() instanceof PlaceholderType && ((PlaceholderType)up.getRhsType()).isInnerType())) {
|
||||||
|
eq2sAsListBack.add(up);
|
||||||
eq2s.remove(up);
|
eq2s.remove(up);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (eq2sAsList.isEmpty()) {
|
if (eq2sAsListFst.isEmpty()) {
|
||||||
List<Set<Set<UnifyPair>>> oderConstraintsVariance = oderConstraintsOutput.stream() //Alle Elemente rauswerfen, die Variance 0 haben oder keine TPH in LHS oder RHS sind
|
List<Set<Set<UnifyPair>>> oderConstraintsVariance = oderConstraintsOutput.stream() //Alle Elemente rauswerfen, die Variance 0 haben oder keine TPH in LHS oder RHS sind
|
||||||
.filter(x -> x.stream()
|
.filter(x -> x.stream()
|
||||||
.filter(y ->
|
.filter(y ->
|
||||||
@ -1805,7 +1819,15 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeLog("eq2s: " + eq2s.toString());
|
||||||
|
writeLog("eq2sAsListFst: " + eq2sAsListFst.toString());
|
||||||
|
writeLog("eq2sAsListSnd: " + eq2sAsListSnd.toString());
|
||||||
|
writeLog("eq2sAsListBack: " + eq2sAsListBack.toString());
|
||||||
|
|
||||||
|
eq2sAsList.addAll(eq2sAsListFst);
|
||||||
|
eq2sAsList.addAll(eq2sAsListSnd);
|
||||||
eq2sAsList.addAll(eq2s);
|
eq2sAsList.addAll(eq2s);
|
||||||
|
eq2sAsList.addAll(eq2sAsListBack);
|
||||||
|
|
||||||
if (eq2sAsList.isEmpty() && first) {//Alle eq2s sind empty und alle oderConstraints mit Variance != 0 sind bearbeitet
|
if (eq2sAsList.isEmpty() && first) {//Alle eq2s sind empty und alle oderConstraints mit Variance != 0 sind bearbeitet
|
||||||
if (!oderConstraintsOutput.isEmpty()) {
|
if (!oderConstraintsOutput.isEmpty()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user