-package org.simantics.scl.compiler.internal.parsing.types;\r
-\r
-import java.util.List;\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.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 TTupleAst extends TypeAst {\r
- public final TypeAst[] components;\r
- \r
- public TTupleAst(TypeAst ... components) {\r
- this.components = components;\r
- }\r
- \r
- public TTupleAst(List<TypeAst> components) {\r
- this(components.toArray(new TypeAst[components.size()]));\r
- }\r
-\r
- @Override\r
- public void toString(StringBuilder b) {\r
- b.append('(');\r
- for(int i=0;i<components.length;++i) {\r
- if(i > 0)\r
- b.append(", ");\r
- components[i].toString(b);\r
- }\r
- b.append(')');\r
- }\r
-\r
- @Override\r
- public Type toType(TypeTranslationContext context, Kind expectedKind) {\r
- if(components.length == 1) {\r
- return components[0].toType(context, expectedKind);\r
- }\r
- else {\r
- context.unify(location, Kinds.STAR, expectedKind);\r
- return Types.tuple(toTypes(context, components));\r
- }\r
- }\r
- \r
- @Override\r
- public Type toType(TypeElaborationContext context) {\r
- if(components.length == 1) {\r
- return components[0].toType(context);\r
- }\r
- else {\r
- return Types.tuple(toTypes(context, components));\r
- }\r
- }\r
-\r
- @Override\r
- public int getPrecedence() {\r
- return 0;\r
- }\r
-\r
- @Override\r
- public void collectReferences(TObjectIntHashMap<String> typeNameMap,\r
- TIntHashSet set) {\r
- for(TypeAst component : components)\r
- component.collectReferences(typeNameMap, set);\r
- }\r
-}\r
+package org.simantics.scl.compiler.internal.parsing.types;
+
+import java.util.List;
+
+import org.simantics.scl.compiler.elaboration.contexts.TypeTranslationContext;
+import org.simantics.scl.compiler.internal.types.TypeElaborationContext;
+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 TTupleAst extends TypeAst {
+ public final TypeAst[] components;
+
+ public TTupleAst(TypeAst ... components) {
+ this.components = components;
+ }
+
+ public TTupleAst(List<TypeAst> components) {
+ this(components.toArray(new TypeAst[components.size()]));
+ }
+
+ @Override
+ public void toString(StringBuilder b) {
+ b.append('(');
+ for(int i=0;i<components.length;++i) {
+ if(i > 0)
+ b.append(", ");
+ components[i].toString(b);
+ }
+ b.append(')');
+ }
+
+ @Override
+ public Type toType(TypeTranslationContext context, Kind expectedKind) {
+ if(components.length == 1) {
+ return components[0].toType(context, expectedKind);
+ }
+ else {
+ context.unify(location, Kinds.STAR, expectedKind);
+ return Types.tuple(toTypes(context, components));
+ }
+ }
+
+ @Override
+ public Type toType(TypeElaborationContext context) {
+ if(components.length == 1) {
+ return components[0].toType(context);
+ }
+ else {
+ return Types.tuple(toTypes(context, components));
+ }
+ }
+
+ @Override
+ public int getPrecedence() {
+ return 0;
+ }
+
+ @Override
+ public void collectReferences(TObjectIntHashMap<String> typeNameMap,
+ TIntHashSet set) {
+ for(TypeAst component : components)
+ component.collectReferences(typeNameMap, set);
+ }
+}