X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fcontexts%2FTypingContext.java;h=68468076d32fa155d81d3e7c82371d33162eff97;hb=HEAD;hp=410ec0213fd5949720cc45dc13d924017bb86a19;hpb=0f7240a0acfa7446366249398e46237fe0e6e1eb;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypingContext.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypingContext.java index 410ec0213..68468076d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypingContext.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypingContext.java @@ -20,8 +20,8 @@ import org.simantics.scl.compiler.internal.elaboration.constraints.ConstraintEnv import org.simantics.scl.compiler.internal.elaboration.constraints.ConstraintSolver; import org.simantics.scl.compiler.internal.elaboration.constraints.ExpressionAugmentation; import org.simantics.scl.compiler.internal.elaboration.constraints.ReducedConstraints; -import org.simantics.scl.compiler.internal.elaboration.subsumption.SubSolver; import org.simantics.scl.compiler.internal.elaboration.subsumption.Subsumption; +import org.simantics.scl.compiler.internal.elaboration.subsumption2.SubSolver2; import org.simantics.scl.compiler.types.Skeletons; import org.simantics.scl.compiler.types.TApply; import org.simantics.scl.compiler.types.TCon; @@ -35,6 +35,7 @@ import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.UnificationException; import org.simantics.scl.compiler.types.kinds.Kinds; +import org.simantics.scl.compiler.types.util.Polarity; import org.simantics.scl.compiler.types.util.TypeUnparsingContext; import gnu.trove.map.hash.THashMap; @@ -406,8 +407,28 @@ public class TypingContext { } public void solveSubsumptions(long globalLoc) { - if(expandSubsumptions()) - new SubSolver(compilationContext.errorLog, effectSubsumptions, potentialSingletonEffects, globalLoc).solve(); + if(expandSubsumptions()) { + if(!effectSubsumptions.isEmpty()) + SubSolver2.solve(compilationContext.errorLog, effectSubsumptions); + + if(!potentialSingletonEffects.isEmpty()) + try { + THashSet vars = new THashSet(4); + for(Type type : potentialSingletonEffects) + type.collectMetaVars(vars); + for(TMetaVar var : vars) { + if(var.getRef() == null) { + Polarity polarity = var.getPolarity(); + if(!polarity.isNegative()) + + var.setRef(Types.NO_EFFECTS); + } + } + } catch(UnificationException e) { + throw new InternalCompilerError(e); + } + //new SubSolver(compilationContext.errorLog, effectSubsumptions, potentialSingletonEffects, globalLoc).solve(); + } } public void declareEffect(long loc, Type effect) { @@ -485,7 +506,7 @@ public class TypingContext { public Expression solveConstraints(Environment environment, Expression expression) { ArrayList constraintDemand = getConstraintDemand(); if(!constraintDemand.isEmpty()) { - ConstraintEnvironment ce = new ConstraintEnvironment(environment); + ConstraintEnvironment ce = new ConstraintEnvironment(compilationContext); ReducedConstraints red = ConstraintSolver.solve( ce, new ArrayList(0), constraintDemand, true);