diff --git a/src/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/de/dhbwstuttgart/core/JavaTXCompiler.java index 74c080e4..6ac13b20 100644 --- a/src/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -25,7 +25,6 @@ import de.dhbwstuttgart.typeinference.typeAlgo.TYPE; import de.dhbwstuttgart.typeinference.unify.RuleSet; import de.dhbwstuttgart.typeinference.unify.TypeUnify; import de.dhbwstuttgart.typeinference.unify.distributeVariance; -import de.dhbwstuttgart.typeinference.unify.inheritVariance; import de.dhbwstuttgart.typeinference.unify.model.FiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType; import de.dhbwstuttgart.typeinference.unify.model.UnifyPair; diff --git a/src/de/dhbwstuttgart/typeinference/unify/distributeVariance.java b/src/de/dhbwstuttgart/typeinference/unify/distributeVariance.java index 21fffde5..fe2e02d4 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/distributeVariance.java +++ b/src/de/dhbwstuttgart/typeinference/unify/distributeVariance.java @@ -1,6 +1,14 @@ package de.dhbwstuttgart.typeinference.unify; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import de.dhbwstuttgart.typeinference.unify.model.FunNType; import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType; +import de.dhbwstuttgart.typeinference.unify.model.TypeParams; +import de.dhbwstuttgart.typeinference.unify.model.UnifyType; public class distributeVariance extends visitUnifyTypeVisitor { @@ -10,10 +18,32 @@ public class distributeVariance extends visitUnifyTypeVisitor { if (phty.getVariance() == 0) { phty.setVariance(ht); } - else if (phty.getVariance() != ht) { - phty.setVariance(0); - } + //PL 2018-05-17 urspruengliche Variance nicht veraendern + //else if (phty.getVariance() != ht) { + // phty.setVariance(0); + //} } return phty; } + + public FunNType visit(FunNType funnty, Integer ht) { + List param = new ArrayList<>(funnty.getTypeParams().get().length); + param.addAll(Arrays.asList(funnty.getTypeParams().get())); + UnifyType resultType = param.remove(param.size()-1); + Integer htInverse = 0; + if (ht == 1) { + htInverse = -1; + } + if (ht == -1) { + htInverse = 1; + } + Integer htInverse1 = htInverse; + param = param.stream() + .map(x -> x.accept(this, htInverse1)) + .collect(Collectors.toCollection(ArrayList::new)); + param.add(resultType.accept(this, ht)); + return FunNType.getFunNType(new TypeParams(param)); + } + + } diff --git a/src/de/dhbwstuttgart/typeinference/unify/inheritVariance.java b/src/de/dhbwstuttgart/typeinference/unify/inheritVariance.java deleted file mode 100644 index 1b6a4d10..00000000 --- a/src/de/dhbwstuttgart/typeinference/unify/inheritVariance.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.dhbwstuttgart.typeinference.unify; - -import java.util.HashMap; - -import de.dhbwstuttgart.typeinference.unify.model.PlaceholderType; - -public class inheritVariance extends visitUnifyTypeVisitor> { - - @Override - public PlaceholderType visit(PlaceholderType phty, HashMap ht) { - if (ht.containsKey(phty)) { - if (phty.getVariance() == 0) { - phty.setVariance(ht.get(phty)); - } - } - return phty; - } -}