]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / printing / ExpressionToStringVisitor.java
index 6cbdb6f6b19aedef68bf8f69321650fca39123dd..ce2af3b929a4f3a53d62d19c622df926a35f4920 100644 (file)
@@ -2,12 +2,17 @@ package org.simantics.scl.compiler.elaboration.expressions.printing;
 \r
 import java.util.Map.Entry;\r
 \r
+import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;\r
+import org.simantics.scl.compiler.elaboration.chr.CHRQuery;\r
+import org.simantics.scl.compiler.elaboration.chr.CHRRule;\r
+import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;\r
 import org.simantics.scl.compiler.elaboration.expressions.Assignment;\r
 import org.simantics.scl.compiler.elaboration.expressions.Case;\r
 import org.simantics.scl.compiler.elaboration.expressions.EApply;\r
 import org.simantics.scl.compiler.elaboration.expressions.EApplyType;\r
 import org.simantics.scl.compiler.elaboration.expressions.EAsPattern;\r
 import org.simantics.scl.compiler.elaboration.expressions.EBind;\r
+import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset;\r
 import org.simantics.scl.compiler.elaboration.expressions.EConstant;\r
 import org.simantics.scl.compiler.elaboration.expressions.ECoveringBranchPoint;\r
 import org.simantics.scl.compiler.elaboration.expressions.EEnforce;\r
@@ -34,6 +39,7 @@ import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet;
 import org.simantics.scl.compiler.elaboration.expressions.ETransformation;\r
 import org.simantics.scl.compiler.elaboration.expressions.ETypeAnnotation;\r
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;\r
+import org.simantics.scl.compiler.elaboration.expressions.EViewPattern;\r
 import org.simantics.scl.compiler.elaboration.expressions.EWhen;\r
 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
 import org.simantics.scl.compiler.elaboration.expressions.ExpressionVisitor;\r
@@ -169,14 +175,16 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
     @Override\r
     public void visit(EIf expression) {\r
         b.append("if ");\r
-        expression.getCondition().accept(this);\r
+        expression.condition.accept(this);\r
         ++indentation;\r
         newLine();\r
         b.append("then ");\r
-        expression.getThen().accept(this);\r
-        newLine();\r
-        b.append("else ");\r
-        expression.getElse().accept(this);\r
+        expression.then_.accept(this);\r
+        if(expression.else_ != null) {\r
+            newLine();\r
+            b.append("else ");\r
+            expression.else_.accept(this);\r
+        }\r
         --indentation;\r
     }\r
     \r
@@ -216,6 +224,15 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
         }\r
         --indentation;\r
     }\r
+    \r
+    @Override\r
+    public void visit(EViewPattern expression) {\r
+        b.append('(');\r
+        expression.expression.accept(this);\r
+        b.append(" -> ");\r
+        expression.pattern.accept(this);\r
+        b.append(')');\r
+    }\r
 \r
     @Override\r
     public void visit(ELambdaType expression) {\r
@@ -494,4 +511,38 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
     public void visit(EEquations eEquations) {\r
         b.append("eq");\r
     }\r
+\r
+    @Override\r
+    public void visit(ECHRRuleset echrRuleset) {\r
+        b.append("CHRRuleset");\r
+    }\r
+\r
+    public void visit(CHRRule rule) {\r
+        visit(rule.head);\r
+        b.append(" => ");\r
+        visit(rule.body);\r
+    }\r
+\r
+    public void visit(CHRQuery query) {\r
+        boolean first = true;\r
+        for(CHRLiteral literal : query.literals) {\r
+            if(first)\r
+                first = false;\r
+            else\r
+                b.append(", ");\r
+            visit(literal);\r
+        }\r
+    }\r
+\r
+    public void visit(CHRLiteral literal) {\r
+        if(literal.passive && literal.relation instanceof CHRConstraint)\r
+            b.append("@passive ");\r
+        if(literal.killAfterMatch)\r
+            b.append('-');\r
+        b.append(literal.relation);\r
+        for(Expression parameter : literal.parameters) {\r
+            b.append(' ');\r
+            showPar(parameter);\r
+        }\r
+    }\r
 }\r