]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java
Merge "Ensure GetElementClassRequest is not constructed without elementFactory"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / printing / ExpressionToStringVisitor.java
index c5f8f3621187b02caf6e19b4437071bddbd4105c..ce2af3b929a4f3a53d62d19c622df926a35f4920 100644 (file)
@@ -2,13 +2,19 @@ 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
 import org.simantics.scl.compiler.elaboration.expressions.EEquations;\r
 import org.simantics.scl.compiler.elaboration.expressions.EError;\r
@@ -25,7 +31,6 @@ import org.simantics.scl.compiler.elaboration.expressions.EListLiteral;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;\r
 import org.simantics.scl.compiler.elaboration.expressions.EMatch;\r
 import org.simantics.scl.compiler.elaboration.expressions.EPlaceholder;\r
-import org.simantics.scl.compiler.elaboration.expressions.ECoveringBranchPoint;\r
 import org.simantics.scl.compiler.elaboration.expressions.ERealLiteral;\r
 import org.simantics.scl.compiler.elaboration.expressions.ERuleset;\r
 import org.simantics.scl.compiler.elaboration.expressions.ESelect;\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
@@ -331,7 +348,7 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
             ESimpleLet let = (ESimpleLet)expression;\r
             Variable variable = let.getVariable();\r
             Expression value = let.getValue();\r
-            if("_".equals(variable.getName()))\r
+            if(variable == null || "_".equals(variable.getName()))\r
                 printAsDo(value);\r
             else {\r
                 newLine();\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