]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/TypeElaborationContext.java
(refs #7588) Support for existential type variables with syntax ?v
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / types / TypeElaborationContext.java
index bfde4677352e4cff7e74661811f8e654a91c8c02..8e638a08984186e97f1c2e0b472e8356348e6d33 100644 (file)
@@ -1,5 +1,6 @@
 package org.simantics.scl.compiler.internal.types;
 
+import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
@@ -10,7 +11,8 @@ import gnu.trove.map.hash.THashMap;
 
 public class TypeElaborationContext {
 
-    THashMap<String, TVar> vars; 
+    THashMap<String, TVar> vars;
+    THashMap<String, TMetaVar> existentials;
     ITypeEnvironment environment;
         
     public TypeElaborationContext(
@@ -24,17 +26,28 @@ public class TypeElaborationContext {
         this(new THashMap<String, TVar>(), environment);
     }
 
+    public TMetaVar resolveExistential(String varName) {
+        if(existentials == null)
+            existentials = new THashMap<String, TMetaVar>();
+        TMetaVar var = existentials.get(varName);
+        if(var == null) {
+            var = Types.metaVar(Kinds.metaVar());
+            existentials.put(varName, var);
+        }
+        return var;
+    }
+
     public TVar resolveTypeVariable(String varName) {
         TVar var = vars.get(varName);
         if(var == null) {
-            var = Types.var(Kinds.STAR /* FIXME */);
+            var = Types.var(Kinds.metaVar());
             vars.put(varName, var);
         }
         return var;
     }
-
+    
     public TVar push(String varName) {
-        return vars.put(varName, Types.var(Kinds.STAR /* FIXME */)); 
+        return vars.put(varName, Types.var(Kinds.metaVar())); 
     }
 
     public TVar pop(String varName, TVar oldVar) {