X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fcontexts%2FTypeTranslationContext.java;h=d107cb621a2dc9ff5ccceb18b4909643832151cd;hp=927720611de5cab6816d5b517223bea54ff34995;hb=4c2fb8fefbdec1856e160dc24b6498aa4bd5eb48;hpb=4bf8562ab7cbb3747f9c5844a07469291d43e905 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypeTranslationContext.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypeTranslationContext.java index 927720611..d107cb621 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypeTranslationContext.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TypeTranslationContext.java @@ -6,6 +6,7 @@ import org.simantics.scl.compiler.errors.ErrorLog; import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException; import org.simantics.scl.compiler.internal.parsing.types.TypeAst; import org.simantics.scl.compiler.types.TCon; +import org.simantics.scl.compiler.types.TMetaVar; import org.simantics.scl.compiler.types.TPred; import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; @@ -25,6 +26,7 @@ public class TypeTranslationContext { ErrorLog errorLog; THashMap typeVariables = new THashMap(); + THashMap existentials; public TypeTranslationContext(CompilationContext compilationContext) { this.compilationContext = compilationContext; @@ -80,6 +82,19 @@ public class TypeTranslationContext { return var; } + public TMetaVar resolveExistential(long loc, String name, Kind expectedKind) { + if(existentials == null) + existentials = new THashMap(); + TMetaVar var = existentials.get(name); + if(var == null) { + var = Types.metaVar(expectedKind); + existentials.put(name, var); + } + else + unify(loc, var.getKind(), expectedKind); + return var; + } + public TVar pushTypeVar(String name) { return typeVariables.put(name, Types.var(Kinds.metaVar())); } @@ -126,4 +141,8 @@ public class TypeTranslationContext { errorLog.log(loc, "Expected a type with kind " + expectedKind + " but got " + provided + "."); } } + + public CompilationContext getCompilationContext() { + return compilationContext; + } }