1 package org.simantics.scl.compiler.internal.types;
3 import org.simantics.scl.compiler.types.TMetaVar;
4 import org.simantics.scl.compiler.types.TVar;
5 import org.simantics.scl.compiler.types.Type;
6 import org.simantics.scl.compiler.types.Types;
7 import org.simantics.scl.compiler.types.kinds.Kinds;
8 import org.simantics.scl.compiler.types.util.ITypeEnvironment;
10 import gnu.trove.map.hash.THashMap;
12 public class TypeElaborationContext {
14 THashMap<String, TVar> vars;
15 THashMap<String, TMetaVar> existentials;
16 ITypeEnvironment environment;
18 public TypeElaborationContext(
19 THashMap<String, TVar> vars,
20 ITypeEnvironment environment) {
22 this.environment = environment;
25 public TypeElaborationContext(ITypeEnvironment environment) {
26 this(new THashMap<String, TVar>(), environment);
29 public TMetaVar resolveExistential(String varName) {
30 if(existentials == null)
31 existentials = new THashMap<String, TMetaVar>();
32 TMetaVar var = existentials.get(varName);
34 var = Types.metaVar(Kinds.metaVar());
35 existentials.put(varName, var);
40 public TVar resolveTypeVariable(String varName) {
41 TVar var = vars.get(varName);
43 var = Types.var(Kinds.metaVar());
44 vars.put(varName, var);
49 public TVar push(String varName) {
50 return vars.put(varName, Types.var(Kinds.metaVar()));
53 public TVar pop(String varName, TVar oldVar) {
55 return vars.remove(varName);
57 return vars.put(varName, oldVar);
60 public Type resolveTypeConstructor(String name) {
61 return environment.resolve(null, name);
64 public Type resolveTypeConstructor(String namespace, String name) {
65 return environment.resolve(namespace, name);