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