1 package org.simantics.scl.compiler.internal.parsing.types;
\r
3 import java.util.ArrayList;
\r
5 import org.simantics.scl.compiler.elaboration.contexts.TypeTranslationContext;
\r
6 import org.simantics.scl.compiler.internal.types.TypeElaborationContext;
\r
7 import org.simantics.scl.compiler.types.Type;
\r
8 import org.simantics.scl.compiler.types.Types;
\r
9 import org.simantics.scl.compiler.types.kinds.Kind;
\r
10 import org.simantics.scl.compiler.types.kinds.Kinds;
\r
12 import gnu.trove.map.hash.TObjectIntHashMap;
\r
13 import gnu.trove.set.hash.TIntHashSet;
\r
17 public class TEffectAst extends TypeAst {
\r
18 public final TypeAst[] effects;
\r
19 public final TypeAst type;
\r
21 public TEffectAst(TypeAst effect, TypeAst type) {
\r
22 this.effects = new TypeAst[] {effect};
\r
26 public TEffectAst(TypeAst[] effects, TypeAst type) {
\r
27 this.effects = effects;
\r
31 public TEffectAst(ArrayList<TypeAst> effects, TypeAst type) {
\r
32 this(effects.toArray(new TypeAst[effects.size()]), type);
\r
36 public void toString(StringBuilder b) {
\r
38 boolean first = true;
\r
39 for(TypeAst effect : effects) {
\r
51 public Type toType(TypeTranslationContext context, Kind expectedKind) {
\r
52 context.unify(location, Kinds.STAR, expectedKind);
\r
53 return Types.functionE(
\r
55 TFunctionAst.toEffect(context, effects),
\r
56 type.toType(context, Kinds.STAR));
\r
60 public Type toType(TypeElaborationContext context) {
\r
61 return Types.functionE(
\r
63 TFunctionAst.toEffect(context, effects),
\r
64 type.toType(context));
\r
68 public int getPrecedence() {
\r
73 public void collectReferences(TObjectIntHashMap<String> typeNameMap,
\r
75 for(TypeAst effect : effects)
\r
76 effect.collectReferences(typeNameMap, set);
\r
77 type.collectReferences(typeNameMap, set);
\r