]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TPredAst.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / types / TPredAst.java
1 package org.simantics.scl.compiler.internal.parsing.types;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.contexts.TypeTranslationContext;\r
4 import org.simantics.scl.compiler.internal.types.TypeElaborationContext;\r
5 import org.simantics.scl.compiler.types.Type;\r
6 import org.simantics.scl.compiler.types.Types;\r
7 import org.simantics.scl.compiler.types.kinds.Kind;\r
8 import org.simantics.scl.compiler.types.kinds.Kinds;\r
9 \r
10 import gnu.trove.map.hash.TObjectIntHashMap;\r
11 import gnu.trove.set.hash.TIntHashSet;\r
12 \r
13 public class TPredAst extends TypeAst {\r
14 \r
15     public final TypeAst constraint;\r
16     public final TypeAst type;\r
17     \r
18     public TPredAst(TypeAst constraint, TypeAst type) {\r
19         this.constraint = constraint;\r
20         this.type = type;\r
21     }\r
22 \r
23     @Override\r
24     public void toString(StringBuilder b) {\r
25         constraint.toString(b);\r
26         b.append(" => ");\r
27         type.toString(b);\r
28     }\r
29 \r
30     @Override\r
31     public Type toType(TypeTranslationContext context, Kind expectedKind) {\r
32         context.unify(location, Kinds.STAR, expectedKind);\r
33         return Types.constrained(\r
34                 constraint.toTFuncApply(context),\r
35                 type.toType(context, Kinds.STAR));\r
36     }\r
37     \r
38     @Override\r
39     public Type toType(TypeElaborationContext context) {\r
40         return Types.constrained(\r
41                 constraint.toTFuncApply(context),\r
42                 type.toType(context));\r
43     }\r
44 \r
45     @Override\r
46     public int getPrecedence() {\r
47         return 2;\r
48     }\r
49 \r
50     @Override\r
51     public void collectReferences(TObjectIntHashMap<String> typeNameMap,\r
52             TIntHashSet set) {\r
53         constraint.collectReferences(typeNameMap, set);\r
54         type.collectReferences(typeNameMap, set);\r
55     }\r
56 \r
57 }\r