1 package org.simantics.scl.compiler.elaboration.equation;
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.types.Type;
12 import gnu.trove.map.hash.TObjectIntHashMap;
13 import gnu.trove.set.hash.THashSet;
14 import gnu.trove.set.hash.TIntHashSet;
16 public class EqBasic extends Equation {
17 public Expression left;
18 public Expression right;
20 public EqBasic(Expression left, Expression right) {
25 public EqBasic(long location, Expression left, Expression right) {
27 this.location = location;
31 public void setLocationDeep(long loc) {
32 if(location == Locations.NO_LOCATION) {
34 left.setLocationDeep(loc);
35 right.setLocationDeep(loc);
40 public void forVariables(VariableProcedure procedure) {
41 left.forVariables(procedure);
42 right.forVariables(procedure);
46 public void collectFreeVariables(THashSet<Variable> vars) {
47 left.collectFreeVariables(vars);
48 right.collectFreeVariables(vars);
52 public void collectEffects(THashSet<Type> effects) {
53 left.collectEffects(effects);
54 right.collectEffects(effects);
58 public void checkType(TypingContext context) {
59 left = left.inferType(context);
60 right = right.checkType(context, left.getType());
64 public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
65 left.collectRefs(allRefs, refs);
66 right.collectRefs(allRefs, refs);
70 public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
71 left.collectVars(allVars, vars);
72 right.collectVars(allVars, vars);
76 public void resolve(TranslationContext context) {
77 left = left.resolve(context);
78 right = right.resolve(context);
82 public void accept(EquationVisitor visitor) {
87 public Equation replace(ReplaceContext context) {
88 return new EqBasic(location, left.replace(context), right.replace(context));