]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java
71dcd04251e2609a7449a119e165a1639ad30354
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / equation / EqBasic.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.errors.Locations;
9
10 import gnu.trove.map.hash.TObjectIntHashMap;
11 import gnu.trove.set.hash.TIntHashSet;
12
13 public class EqBasic extends Equation {
14     public Expression left;
15     public Expression right;
16     
17     public EqBasic(Expression left, Expression right) {
18         this.left = left;
19         this.right = right;
20     }
21     
22     public EqBasic(long location, Expression left, Expression right) {
23         this(left, right);
24         this.location = location;
25     }
26     
27     @Override
28     public void setLocationDeep(long loc) {
29         if(location == Locations.NO_LOCATION) {
30             location = loc;
31             left.setLocationDeep(loc);
32             right.setLocationDeep(loc);
33         }
34     }
35
36     @Override
37     public void checkType(TypingContext context) {
38         left = left.inferType(context);
39         right = right.checkType(context, left.getType());
40     }
41
42     @Override
43     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
44         left.collectVars(allVars, vars);
45         right.collectVars(allVars, vars);
46     }
47
48     @Override
49     public void resolve(TranslationContext context) {
50         left = left.resolve(context);
51         right = right.resolve(context);
52     }
53
54     @Override
55     public void accept(EquationVisitor visitor) {
56         visitor.visit(this);
57     }
58
59     @Override
60     public Equation replace(ReplaceContext context) {
61         return new EqBasic(location, left.replace(context), right.replace(context));
62     }
63 }