]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
(refs #7375) Replaced ExpressionDecorator by ExpressionTransformer
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionVisitor.java
index be9be3109c75fe29a08fe119f88529a8788519aa..83bbd34d1bfe29356cf14811828fa1bfec7f9270 100644 (file)
@@ -1,6 +1,7 @@
 package org.simantics.scl.compiler.elaboration.expressions;
 
 import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
+import org.simantics.scl.compiler.elaboration.chr.CHRQuery;
 import org.simantics.scl.compiler.elaboration.chr.CHRRule;
 import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
 import org.simantics.scl.compiler.elaboration.equation.EqBasic;
@@ -13,6 +14,7 @@ import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor
 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.CHRStatement;
 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;
@@ -22,6 +24,7 @@ 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.ListQualifier;
 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;
@@ -196,6 +199,12 @@ EquationVisitor, StatementVisitor {
         expression.query.accept(this);
         expression.expression.accept(this);
     }
+    
+    @Override
+    public void visit(ECHRSelect expression) {
+        visit(expression.query);
+        expression.expression.accept(this);
+    }
 
     @Override
     public void visit(ESimpleLambda expression) {
@@ -354,14 +363,16 @@ EquationVisitor, StatementVisitor {
             equation.accept(this);
     }
     
+    public void visit(CHRQuery query) {
+        for(CHRLiteral literal : query.literals)
+            for(Expression parameter : literal.parameters)
+                parameter.accept(this);
+    }
+    
     public void visit(CHRRuleset ruleset) {
         for(CHRRule rule : ruleset.rules) {
-            for(CHRLiteral literal : rule.head.literals)
-                for(Expression parameter : literal.parameters)
-                    parameter.accept(this);
-            for(CHRLiteral literal : rule.body.literals)
-                for(Expression parameter : literal.parameters)
-                    parameter.accept(this);
+            visit(rule.head);
+            visit(rule.body);
         }
     }
 
@@ -443,4 +454,12 @@ EquationVisitor, StatementVisitor {
     public void visit(IncludeStatement statement) {
         statement.value.accept(this);
     }
+    
+    @Override
+    public void visit(CHRStatement statement) {
+        for(ListQualifier q : statement.body)
+            q.accept(this);
+        for(ListQualifier q : statement.head)
+            q.accept(this);
+    }
 }