]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
Merge "Resolve some dependency problems with SDK features"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionVisitor.java
index 6bdd7abde4bcf90df1926bad6901f5ce79a48b97..be9be3109c75fe29a08fe119f88529a8788519aa 100644 (file)
@@ -2,22 +2,30 @@ package org.simantics.scl.compiler.elaboration.expressions;
 
 import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
 import org.simantics.scl.compiler.elaboration.chr.CHRRule;
+import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
 import org.simantics.scl.compiler.elaboration.equation.EqBasic;
 import org.simantics.scl.compiler.elaboration.equation.EqGuard;
 import org.simantics.scl.compiler.elaboration.equation.Equation;
 import org.simantics.scl.compiler.elaboration.equation.EquationVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.ERuleset.DatalogRule;
 import org.simantics.scl.compiler.elaboration.expressions.accessor.ExpressionAccessor;
-import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor;
 import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessorVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.accessor.IdAccessor;
 import org.simantics.scl.compiler.elaboration.expressions.accessor.StringAccessor;
+import org.simantics.scl.compiler.elaboration.expressions.block.BindStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.GuardStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.IncludeStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.LetStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.RuleStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.Statement;
+import org.simantics.scl.compiler.elaboration.expressions.block.StatementVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListAssignment;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListGenerator;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListGuard;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListQualifierVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListSeq;
 import org.simantics.scl.compiler.elaboration.expressions.list.ListThen;
+import org.simantics.scl.compiler.elaboration.expressions.records.FieldAssignment;
 import org.simantics.scl.compiler.elaboration.query.QAlternative;
 import org.simantics.scl.compiler.elaboration.query.QAtom;
 import org.simantics.scl.compiler.elaboration.query.QConjunction;
@@ -32,7 +40,7 @@ import org.simantics.scl.compiler.elaboration.query.QueryVisitor;
 
 public class StandardExpressionVisitor implements 
 ExpressionVisitor, QueryVisitor, FieldAccessorVisitor, ListQualifierVisitor,
-EquationVisitor {
+EquationVisitor, StatementVisitor {
 
     @Override
     public void visit(EApply expression) {
@@ -78,8 +86,7 @@ EquationVisitor {
     @Override
     public void visit(EFieldAccess expression) {
         expression.parent.accept(this);
-        for(FieldAccessor accessor : expression.accessors)
-            accessor.accept(this);
+        expression.accessor.accept(this);
     }
 
     @Override
@@ -211,6 +218,10 @@ EquationVisitor {
         expression.value.accept(this);
     }
 
+    @Override
+    public void visit(EVar expression) {
+    }
+
     @Override
     public void visit(EVariable expression) {
     }
@@ -342,10 +353,9 @@ EquationVisitor {
         for(Equation equation : expression.equations)
             equation.accept(this);
     }
-
-    @Override
-    public void visit(ECHRRuleset ruleset) {
-        for(CHRRule rule : ruleset.ruleset.rules) {
+    
+    public void visit(CHRRuleset ruleset) {
+        for(CHRRule rule : ruleset.rules) {
             for(CHRLiteral literal : rule.head.literals)
                 for(Expression parameter : literal.parameters)
                     parameter.accept(this);
@@ -353,7 +363,84 @@ EquationVisitor {
                 for(Expression parameter : literal.parameters)
                     parameter.accept(this);
         }
-        ruleset.in.accept(this);
     }
 
+    @Override
+    public void visit(ECHRRuleset expression) {
+        visit(expression.ruleset);
+        expression.in.accept(this);
+    }
+    
+    @Override
+    public void visit(ECHRRulesetConstructor expression) {
+        visit(expression.ruleset);
+    }
+
+    @Override
+    public void visit(EBinary expression) {
+        expression.left.accept(this);
+        for(EBinaryRightSide right : expression.rights)
+            right.right.accept(this);
+    }
+
+    @Override
+    public void visit(EBlock expression) {
+        for(Statement stat : expression.statements)
+            stat.accept(this);
+    }
+
+    @Override
+    public void visit(EPreLet expression) {
+        for(LetStatement stat : expression.assignments) {
+            stat.pattern.accept(this);
+            stat.value.accept(this);
+        }
+        expression.in.accept(this);
+    }
+
+    @Override
+    public void visit(ERange expression) {
+        expression.from.accept(this);
+        expression.to.accept(this);
+    }
+
+    @Override
+    public void visit(ERecord expression) {
+        for(FieldAssignment assignment : expression.fields)
+            assignment.value.accept(this);
+        
+    }
+
+    @Override
+    public void visit(EStringLiteral expression) {
+        for(Expression exp : expression.expressions)
+            exp.accept(this);
+    }
+
+    @Override
+    public void visit(BindStatement statement) {
+        statement.pattern.accept(this);
+        statement.value.accept(this);
+    }
+
+    @Override
+    public void visit(GuardStatement statement) {
+        statement.value.accept(this);
+    }
+
+    @Override
+    public void visit(LetStatement statement) {
+        statement.value.accept(this);
+    }
+
+    @Override
+    public void visit(RuleStatement statement) {
+        statement.head.accept(this);
+        statement.body.accept(this);
+    }
+
+    @Override
+    public void visit(IncludeStatement statement) {
+        statement.value.accept(this);
+    }
 }