]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionTransformer.java
(refs #7375) Replaced ExpressionDecorator by ExpressionTransformer
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionTransformer.java
index 1bd0d22c4ec4b7f4a075f0375da97a53075714c0..948f7c645380b03ace647558546579ef09ceba68 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;
@@ -44,6 +45,8 @@ EquationVisitor {
 
     @Override
     public Expression transform(EAmbiguous expression) {
+        if(expression.resolvedExpression != null)
+            expression.resolvedExpression = expression.resolvedExpression.accept(this);
         return expression;
     }
 
@@ -125,14 +128,16 @@ EquationVisitor {
         statement.value = statement.value.accept(this);
     }
     
+    public void transform(CHRQuery query) {
+        for(CHRLiteral lit : query.literals)
+            for(int i=0;i<lit.parameters.length;++i)
+                lit.parameters[i] = lit.parameters[i].accept(this);
+    }
+    
     public void transform(CHRRuleset ruleset) {
         for(CHRRule rule : ruleset.rules) {
-            for(CHRLiteral lit : rule.head.literals)
-                for(int i=0;i<lit.parameters.length;++i)
-                    lit.parameters[i] = lit.parameters[i].accept(this);
-            for(CHRLiteral lit : rule.body.literals)
-                for(int i=0;i<lit.parameters.length;++i)
-                    lit.parameters[i] = lit.parameters[i].accept(this);
+            transform(rule.head);
+            transform(rule.body);
         }
     }
     
@@ -143,6 +148,13 @@ EquationVisitor {
         return expression;
     }
     
+    @Override
+    public Expression transform(ECHRSelect expression) {
+        expression.expression = expression.expression.accept(this);
+        transform(expression.query);
+        return expression;
+    }
+    
     @Override
     public Expression transform(ECHRRulesetConstructor expression) {
         transform(expression.ruleset);