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%2FTypeTranslationContext.java;h=d107cb621a2dc9ff5ccceb18b4909643832151cd;hb=HEAD;hp=1eea959fd249459273a9139008b86d29ac9a2d0c;hpb=1ec0193a5a5b8f368b03adb24acd762838ddf8ea;p=simantics%2Fplatform.git 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 1eea959fd..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())); }