forked from JavaTX/JavaCompilerCore
modified: ../../../main/java/de/dhbwstuttgart/core/JavaTXCompiler.java
modified: ../../../main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
This commit is contained in:
parent
82f330eab5
commit
212aeaa3a0
@ -551,8 +551,8 @@ public class JavaTXCompiler {
|
|||||||
}
|
}
|
||||||
/* UnifyResultModel End */
|
/* UnifyResultModel End */
|
||||||
else {
|
else {
|
||||||
//Set<Set<UnifyPair>> result = unify.unify(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, new UnifyResultModel(cons, finiteClosure));
|
Set<Set<UnifyPair>> result = unify.unify(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, new UnifyResultModel(cons, finiteClosure));
|
||||||
Set<Set<UnifyPair>> result = unify.unifyOderConstraints(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, new UnifyResultModel(cons, finiteClosure));
|
//Set<Set<UnifyPair>> result = unify.unifyOderConstraints(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, new UnifyResultModel(cons, finiteClosure));
|
||||||
System.out.println("RESULT: " + result);
|
System.out.println("RESULT: " + result);
|
||||||
logFile.write("RES: " + result.toString()+"\n");
|
logFile.write("RES: " + result.toString()+"\n");
|
||||||
logFile.flush();
|
logFile.flush();
|
||||||
|
@ -615,15 +615,23 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
writeLog("BasePair1: " + nextSetElem + " " + nextSetElem.iterator().next().getBasePair());
|
writeLog("BasePair1: " + nextSetElem + " " + nextSetElem.iterator().next().getBasePair());
|
||||||
|
|
||||||
/* sameEqSet-Bestimmung: Wenn a = ty \in nextSet dann enthaelt sameEqSet alle Paare a < ty1 oder ty2 < a aus fstElems */
|
/* sameEqSet-Bestimmung: Wenn a = ty \in nextSet dann enthaelt sameEqSet alle Paare a < ty1 oder ty2 < a aus fstElems */
|
||||||
Set<UnifyPair> sameEqSet = null;
|
Set<UnifyPair> sameEqSet = new HashSet<>();
|
||||||
if (variance != 2) {
|
if (variance != 2) {
|
||||||
Optional<UnifyPair> optOrigPair = nextSetElem.stream().filter(x -> (x.getBasePair() != null && x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT)
|
Optional<UnifyPair> optOrigPair = nextSetElem.stream().filter(x -> (
|
||||||
&& //(x.getPairOp().equals(PairOperator.EQUALSDOT))
|
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
||||||
|
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
||||||
|
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
||||||
|
/*
|
||||||
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType()))
|
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
)).findFirst();
|
*/
|
||||||
|
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
||||||
|
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
||||||
|
x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
).findFirst();
|
||||||
|
writeLog("optOrigPair: " + optOrigPair);
|
||||||
if (optOrigPair.isPresent()) {
|
if (optOrigPair.isPresent()) {
|
||||||
UnifyPair origPair = optOrigPair.get();
|
UnifyPair origPair = optOrigPair.get();
|
||||||
UnifyType tyVar;
|
UnifyType tyVar;
|
||||||
@ -748,20 +756,27 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
Set<Set<UnifyPair>> aParDef = new HashSet<>();
|
Set<Set<UnifyPair>> aParDef = new HashSet<>();
|
||||||
|
|
||||||
/* PL 2019-03-11 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
/* PL 2019-03-11 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
||||||
if (variance != 2) {
|
if (variance != 2 && !sameEqSet.isEmpty()) {
|
||||||
Optional<UnifyPair> optAPair = a.stream().filter(x -> (x.getBasePair() != null && x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT)
|
Optional<UnifyPair> optAPair = a.stream().filter(x -> (
|
||||||
&& //(x.getPairOp().equals(PairOperator.EQUALSDOT))
|
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
||||||
|
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
||||||
|
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
||||||
|
/*
|
||||||
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType()))
|
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
)).findFirst();
|
*/
|
||||||
|
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
||||||
|
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
||||||
|
x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
).findFirst();
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
||||||
UnifyPair aPair = optAPair.get();
|
UnifyPair aPair = optAPair.get();
|
||||||
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
//writeLog("optOrigPair: " + optOrigPair + " " + "aPair: " + aPair+ " " + "aPair.basePair(): " + aPair.getBasePair());
|
||||||
writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet);
|
writeLog("variance: " + new Integer(variance).toString() + "sameEqSet:" + sameEqSet);
|
||||||
if (variance != 2 && !sameEqSet.isEmpty() && !checkA(aPair, sameEqSet, elems, result)) {
|
if (!checkA(aPair, sameEqSet, elems, result)) {
|
||||||
a = null;
|
a = null;
|
||||||
noShortendElements++;
|
noShortendElements++;
|
||||||
continue;
|
continue;
|
||||||
@ -794,12 +809,20 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
||||||
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (x.getBasePair() != null && x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT)
|
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (
|
||||||
&& ((x.getBasePair().getLhsType() instanceof PlaceholderType
|
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType())))
|
/*
|
||||||
)).findFirst();
|
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
||||||
|
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
||||||
|
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
||||||
|
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
*/
|
||||||
|
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
||||||
|
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
||||||
|
x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
).findFirst();
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
||||||
UnifyPair aPair = optAPair.get();
|
UnifyPair aPair = optAPair.get();
|
||||||
@ -879,12 +902,20 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
/* PL 2019-03-13 Anfang eingefuegt Vergleich mit anderen Paaren ggf. loeschen */
|
||||||
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (x.getBasePair() != null && x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT)
|
Optional<UnifyPair> optAPair = nSaL.stream().filter(x -> (
|
||||||
&& ((x.getBasePair().getLhsType() instanceof PlaceholderType
|
//x.getBasePair() != null && ist gegeben wenn variance != 2
|
||||||
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
//x.getBasePair().getPairOp().equals(PairOperator.SMALLERDOT) &&
|
||||||
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
(x.getPairOp().equals(PairOperator.EQUALSDOT)
|
||||||
&& x.getLhsType().equals(x.getBasePair().getRhsType())))
|
/*
|
||||||
)).findFirst();
|
(x.getBasePair().getLhsType() instanceof PlaceholderType
|
||||||
|
&& x.getLhsType().equals(x.getBasePair().getLhsType()))
|
||||||
|
|| (x.getBasePair().getRhsType() instanceof PlaceholderType
|
||||||
|
&& x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
*/
|
||||||
|
))).filter(x -> //Sicherstellen, dass bei a = ty a auch wirklich die gesuchte Typvariable ist
|
||||||
|
x.getLhsType().equals(x.getBasePair().getLhsType()) ||
|
||||||
|
x.getLhsType().equals(x.getBasePair().getRhsType())
|
||||||
|
).findFirst();
|
||||||
|
|
||||||
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
if (optAPair.isPresent()) {//basepair ist entweder a <. Ty oder ty <. a
|
||||||
UnifyPair aPair = optAPair.get();
|
UnifyPair aPair = optAPair.get();
|
||||||
|
Loading…
Reference in New Issue
Block a user