-package org.simantics.scl.compiler.internal.parsing.types;\r
-\r
-import org.simantics.scl.compiler.elaboration.contexts.TypeTranslationContext;\r
-import org.simantics.scl.compiler.internal.types.TypeElaborationContext;\r
-import org.simantics.scl.compiler.types.TVar;\r
-import org.simantics.scl.compiler.types.Type;\r
-import org.simantics.scl.compiler.types.Types;\r
-import org.simantics.scl.compiler.types.kinds.Kind;\r
-import org.simantics.scl.compiler.types.kinds.Kinds;\r
-\r
-import gnu.trove.map.hash.TObjectIntHashMap;\r
-import gnu.trove.set.hash.TIntHashSet;\r
-\r
-\r
-\r
-public class TForAllAst extends TypeAst {\r
- public final String[] vars;\r
- public final TypeAst type;\r
- \r
- public TForAllAst(String[] vars, TypeAst type) {\r
- this.vars = vars;\r
- this.type = type;\r
- }\r
- \r
- @Override\r
- public void toString(StringBuilder b) {\r
- b.append("forall");\r
- for(String var : vars) {\r
- b.append(' ');\r
- b.append(var);\r
- }\r
- b.append(". ");\r
- type.toString(b);\r
- }\r
-\r
- @Override\r
- public Type toType(TypeTranslationContext context, Kind expectedKind) {\r
- context.unify(location, Kinds.STAR, expectedKind);\r
- TVar[] oldVars = new TVar[vars.length];\r
- for(int i=0;i<vars.length;++i)\r
- oldVars[i] = context.pushTypeVar(vars[i]);\r
- Type result = type.toType(context, Kinds.STAR);\r
- for(int i=vars.length-1;i>=0;--i)\r
- result = Types.forAll(context.popTypeVar(vars[i], oldVars[i]), result);\r
- return result;\r
- }\r
- \r
- @Override\r
- public Type toType(TypeElaborationContext context) {\r
- TVar[] oldVars = new TVar[vars.length];\r
- for(int i=0;i<vars.length;++i)\r
- oldVars[i] = context.push(vars[i]);\r
- Type result = type.toType(context);\r
- for(int i=vars.length-1;i>=0;--i)\r
- result = Types.forAll(context.pop(vars[i], oldVars[i]), result);\r
- return result;\r
- }\r
- \r
- @Override\r
- public int getPrecedence() {\r
- return 2;\r
- }\r
-\r
- @Override\r
- public void collectReferences(TObjectIntHashMap<String> typeNameMap,\r
- TIntHashSet set) {\r
- type.collectReferences(typeNameMap, set);\r
- }\r
-}\r
+package org.simantics.scl.compiler.internal.parsing.types;
+
+import org.simantics.scl.compiler.elaboration.contexts.TypeTranslationContext;
+import org.simantics.scl.compiler.internal.types.TypeElaborationContext;
+import org.simantics.scl.compiler.types.TVar;
+import org.simantics.scl.compiler.types.Type;
+import org.simantics.scl.compiler.types.Types;
+import org.simantics.scl.compiler.types.kinds.Kind;
+import org.simantics.scl.compiler.types.kinds.Kinds;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.TIntHashSet;
+
+
+
+public class TForAllAst extends TypeAst {
+ public final String[] vars;
+ public final TypeAst type;
+
+ public TForAllAst(String[] vars, TypeAst type) {
+ this.vars = vars;
+ this.type = type;
+ }
+
+ @Override
+ public void toString(StringBuilder b) {
+ b.append("forall");
+ for(String var : vars) {
+ b.append(' ');
+ b.append(var);
+ }
+ b.append(". ");
+ type.toString(b);
+ }
+
+ @Override
+ public Type toType(TypeTranslationContext context, Kind expectedKind) {
+ context.unify(location, Kinds.STAR, expectedKind);
+ TVar[] oldVars = new TVar[vars.length];
+ for(int i=0;i<vars.length;++i)
+ oldVars[i] = context.pushTypeVar(vars[i]);
+ Type result = type.toType(context, Kinds.STAR);
+ for(int i=vars.length-1;i>=0;--i)
+ result = Types.forAll(context.popTypeVar(vars[i], oldVars[i]), result);
+ return result;
+ }
+
+ @Override
+ public Type toType(TypeElaborationContext context) {
+ TVar[] oldVars = new TVar[vars.length];
+ for(int i=0;i<vars.length;++i)
+ oldVars[i] = context.push(vars[i]);
+ Type result = type.toType(context);
+ for(int i=vars.length-1;i>=0;--i)
+ result = Types.forAll(context.pop(vars[i], oldVars[i]), result);
+ return result;
+ }
+
+ @Override
+ public int getPrecedence() {
+ return 2;
+ }
+
+ @Override
+ public void collectReferences(TObjectIntHashMap<String> typeNameMap,
+ TIntHashSet set) {
+ type.collectReferences(typeNameMap, set);
+ }
+}