From fa92fee98de4651c038d91e432b550e035ea437b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Sat, 30 Sep 2017 14:51:05 +0200 Subject: [PATCH] modified: .classpath Keine Ahnung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit modified: src/de/dhbwstuttgart/typeinference/unify/RuleSet.java Aenderung Zeile 578 rhsType = pair.getRhsType(); //PL eingefuegt 2017-09-29 statt !((rhsType = pair.getRhsType()) instanceof PlaceholderType) if(lhsType != null //&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType) //PL geloescht am 2017-09-29 Begründung: auch Typvariablen muessen ersetzt werden. modified: src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java 1. Aenderung: Zeile 168 /* * Step 6 a) Restart (fork) for pairs where subst was applied */ if(parallel) { if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch (!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt //Begruendung: Wenn in der Substitution keine Veraenderung //(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt. eqPrimePrimeSet.add(eqPrime); 2. Aenderung: Ziel 188 else { // sequentiell (Step 6b is included) if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch (!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt //Begruendung: Wenn in der Substitution keine Veraenderung //(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt. eqPrimePrimeSet.add(eqPrime); --- .classpath | 1 - .../dhbwstuttgart/typeinference/unify/RuleSet.java | 3 ++- .../typeinference/unify/TypeUnifyTask.java | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.classpath b/.classpath index 5877484d..8d756e94 100644 --- a/.classpath +++ b/.classpath @@ -16,7 +16,6 @@ - diff --git a/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java b/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java index 2b641125..06134d6b 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java +++ b/src/de/dhbwstuttgart/typeinference/unify/RuleSet.java @@ -575,8 +575,9 @@ public class RuleSet implements IRuleSet{ if(pair.getPairOp() == PairOperator.EQUALSDOT && pair.getLhsType() instanceof PlaceholderType) lhsType = (PlaceholderType) pair.getLhsType(); + rhsType = pair.getRhsType(); //PL eingefuegt 2017-09-29 statt !((rhsType = pair.getRhsType()) instanceof PlaceholderType) if(lhsType != null - && !((rhsType = pair.getRhsType()) instanceof PlaceholderType) + //&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType) //PL geloescht am 2017-09-29 Begründung: auch Typvariablen muessen ersetzt werden. && typeMap.get(lhsType) > 1 // The type occurs in more pairs in the set than just the recent pair. && !rhsType.getTypeParams().occurs(lhsType)) { Unifier uni = new Unifier(lhsType, rhsType); diff --git a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java index be67ea09..09bb15b8 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java +++ b/src/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java @@ -119,7 +119,7 @@ public class TypeUnifyTask extends RecursiveTask>> { // Sets of the "second level" Set undefinedPairs = new HashSet<>(); Set>>> secondLevelSets = calculatePairSets(eq2s, fc, undefinedPairs); - + //PL 2017-09-20: Im calculatePairSets wird möglicherweise O .< java.lang.Integer nicht ausgewertet Faculty Beispiel im 1. Schritt // If pairs occured that did not match one of the cartesian product cases, // those pairs are contradictory and the unification is impossible. if(!undefinedPairs.isEmpty()) @@ -169,7 +169,10 @@ public class TypeUnifyTask extends RecursiveTask>> { * Step 6 a) Restart (fork) for pairs where subst was applied */ if(parallel) { - if (eqPrime.equals(eq)) + if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch + (!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt + //Begruendung: Wenn in der Substitution keine Veraenderung + //(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt. eqPrimePrimeSet.add(eqPrime); else if(eqPrimePrime.isPresent()) { TypeUnifyTask fork = new TypeUnifyTask(eqPrimePrime.get(), fc, true); @@ -183,7 +186,10 @@ public class TypeUnifyTask extends RecursiveTask>> { } } else { // sequentiell (Step 6b is included) - if (eqPrime.equals(eq)) + if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch + (!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt + //Begruendung: Wenn in der Substitution keine Veraenderung + //(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt. eqPrimePrimeSet.add(eqPrime); else if(eqPrimePrime.isPresent()) eqPrimePrimeSet.addAll(unify(eqPrimePrime.get(), fc, false));