]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java
c8bf5c12024ff43219f93447dd52b04039f5c95e
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / equation / EqGuard.java
1 package org.simantics.scl.compiler.elaboration.equation;
2
3 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
4 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
5 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
6 import org.simantics.scl.compiler.elaboration.expressions.Expression;
7 import org.simantics.scl.compiler.elaboration.expressions.Variable;
8 import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
9 import org.simantics.scl.compiler.errors.Locations;
10 import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;
11 import org.simantics.scl.compiler.types.Type;
12
13 import gnu.trove.map.hash.TObjectIntHashMap;
14 import gnu.trove.set.hash.THashSet;
15 import gnu.trove.set.hash.TIntHashSet;
16
17 public class EqGuard extends Equation {
18     public Expression guard;
19
20     public EqGuard(Expression guard) {
21         this.guard = guard;
22     }
23     
24     public EqGuard(long location, Expression guard) {
25         this(guard);
26         this.location = location;
27     }
28
29     @Override
30     public void setLocationDeep(long loc) {
31         if(location == Locations.NO_LOCATION) {
32             location = loc;
33             guard.setLocationDeep(loc);
34         }
35     }
36
37     @Override
38     public void forVariables(VariableProcedure procedure) {
39         guard.forVariables(procedure);
40     }
41
42     @Override
43     public void collectFreeVariables(THashSet<Variable> vars) {
44         guard.collectFreeVariables(vars);
45     }
46
47     @Override
48     public void decorate(ExpressionDecorator decorator) {
49         guard = guard.decorate(decorator);
50     }
51
52     @Override
53     public void collectEffects(THashSet<Type> effects) {
54         guard.collectEffects(effects);
55     }
56
57     @Override
58     public void checkType(TypingContext context) {
59         guard = guard.checkIgnoredType(context);
60     }
61
62     @Override
63     public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
64         guard.collectRefs(allRefs, refs);
65     }
66
67     @Override
68     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
69         guard.collectVars(allVars, vars);
70     }
71
72     @Override
73     public void resolve(TranslationContext context) {
74         guard = guard.resolve(context);
75     }
76     
77     @Override
78     public void accept(EquationVisitor visitor) {
79         visitor.visit(this);
80     }
81
82     @Override
83     public Equation replace(ReplaceContext context) {
84         return new EqGuard(location, guard.replace(context));
85     }
86 }