]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionTransformer.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionTransformer.java
index 1a2f451eeab205b8aff61a0ae5d655a2750660f4..2fc6d1e7eb4d93ea1f224dc214650eae6c766a14 100644 (file)
@@ -1,5 +1,7 @@
 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.equation.EqBasic;
 import org.simantics.scl.compiler.elaboration.equation.EqGuard;
 import org.simantics.scl.compiler.elaboration.equation.Equation;
@@ -79,6 +81,13 @@ EquationVisitor {
         return expression;
     }
 
+    @Override
+    public Expression transform(EViewPattern expression) {
+        expression.expression = expression.expression.accept(this);
+        expression.pattern = expression.pattern.accept(this);
+        return expression;
+    }
+    
     @Override
     public Expression transform(EBlock expression) {
         for(Statement statement : expression.statements)
@@ -109,6 +118,20 @@ EquationVisitor {
         statement.body = statement.body.accept(this);
     }
 
+    @Override
+    public Expression transform(ECHRRuleset expression) {
+        expression.in = expression.in.accept(this);
+        for(CHRRule rule : expression.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);
+        }
+        return expression;
+    }
+
     @Override
     public Expression transform(EConstant expression) {
         return expression;
@@ -158,7 +181,8 @@ EquationVisitor {
     public Expression transform(EIf expression) {
         expression.condition = expression.condition.accept(this);
         expression.then_ = expression.then_.accept(this);
-        expression.else_ = expression.else_.accept(this);
+        if(expression.else_ != null)
+            expression.else_ = expression.else_.accept(this);
         return expression;
     }