]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java
(refs #7746) Fixed applications with intermediate effects
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / printing / ExpressionToStringVisitor.java
index ac347385ae68b5d860ad927cb52a4f67ff9a0282..122548fac399e6868d97c00fabebcbb5ad333847 100644 (file)
@@ -8,11 +8,16 @@ import org.simantics.scl.compiler.elaboration.chr.CHRRule;
 import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
 import org.simantics.scl.compiler.elaboration.expressions.Assignment;
 import org.simantics.scl.compiler.elaboration.expressions.Case;
+import org.simantics.scl.compiler.elaboration.expressions.EAmbiguous;
 import org.simantics.scl.compiler.elaboration.expressions.EApply;
 import org.simantics.scl.compiler.elaboration.expressions.EApplyType;
 import org.simantics.scl.compiler.elaboration.expressions.EAsPattern;
+import org.simantics.scl.compiler.elaboration.expressions.EBinary;
 import org.simantics.scl.compiler.elaboration.expressions.EBind;
+import org.simantics.scl.compiler.elaboration.expressions.EBlock;
 import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset;
+import org.simantics.scl.compiler.elaboration.expressions.ECHRRulesetConstructor;
+import org.simantics.scl.compiler.elaboration.expressions.ECHRSelect;
 import org.simantics.scl.compiler.elaboration.expressions.EConstant;
 import org.simantics.scl.compiler.elaboration.expressions.ECoveringBranchPoint;
 import org.simantics.scl.compiler.elaboration.expressions.EEnforce;
@@ -31,13 +36,18 @@ import org.simantics.scl.compiler.elaboration.expressions.EListLiteral;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
 import org.simantics.scl.compiler.elaboration.expressions.EMatch;
 import org.simantics.scl.compiler.elaboration.expressions.EPlaceholder;
+import org.simantics.scl.compiler.elaboration.expressions.EPreLet;
+import org.simantics.scl.compiler.elaboration.expressions.ERange;
 import org.simantics.scl.compiler.elaboration.expressions.ERealLiteral;
+import org.simantics.scl.compiler.elaboration.expressions.ERecord;
 import org.simantics.scl.compiler.elaboration.expressions.ERuleset;
 import org.simantics.scl.compiler.elaboration.expressions.ESelect;
 import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;
 import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet;
+import org.simantics.scl.compiler.elaboration.expressions.EStringLiteral;
 import org.simantics.scl.compiler.elaboration.expressions.ETransformation;
 import org.simantics.scl.compiler.elaboration.expressions.ETypeAnnotation;
+import org.simantics.scl.compiler.elaboration.expressions.EVar;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
 import org.simantics.scl.compiler.elaboration.expressions.EViewPattern;
 import org.simantics.scl.compiler.elaboration.expressions.EWhen;
@@ -63,6 +73,8 @@ import org.simantics.scl.compiler.elaboration.rules.TransformationRule;
 
 public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisitor {
 
+    public static final boolean SHOW_EFFECTS = false;
+    
     StringBuilder b = new StringBuilder();
     int indentation;
     
@@ -114,6 +126,8 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
     @Override
     public void visit(EApply expression) {
         showPar(expression.getFunction());
+        if(SHOW_EFFECTS)
+            b.append(" {" + expression.effect + "}");
         for(Expression parameter : expression.getParameters()) {
             b.append(' ');
             showPar(parameter);
@@ -217,6 +231,8 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
                 showPar(pat);
                 b.append(' ');
             }
+            if(SHOW_EFFECTS)
+                b.append("{" + expression.effect + "} ");
             b.append("-> ");
             ++indentation;
             case_.value.accept(this);
@@ -321,7 +337,12 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
     public void visit(ESelect expression) {
         b.append("ESelect");
     }
-
+    
+    @Override
+    public void visit(ECHRSelect expression) {
+        b.append("ECHRSelect");
+    }
+    
     @Override
     public void visit(ESimpleLambda expression) {
         b.append('\\');
@@ -331,6 +352,8 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
             b.append(' ');
             show(expression.getParameter());
         }
+        if(SHOW_EFFECTS)
+            b.append(" {" + expression.effect + "}");
         b.append(" -> ");
         expression.getValue().accept(this);
     }
@@ -384,6 +407,11 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
         expression.getValue().accept(this);
     }
 
+    @Override
+    public void visit(EVar expression) {
+        b.append(expression.name);
+    }
+
     @Override
     public void visit(EVariable expression) {
         show(expression.getVariable());
@@ -508,13 +536,18 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
     }
 
     @Override
-    public void visit(EEquations eEquations) {
+    public void visit(EEquations expression) {
         b.append("eq");
     }
 
     @Override
-    public void visit(ECHRRuleset echrRuleset) {
-        b.append("CHRRuleset");
+    public void visit(ECHRRuleset expression) {
+        b.append("ECHRRuleset");
+    }
+    
+    @Override
+    public void visit(ECHRRulesetConstructor expression) {
+        b.append("ECHRRulesetConstructor");
     }
 
     public void visit(CHRRule rule) {
@@ -545,4 +578,52 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito
             showPar(parameter);
         }
     }
+
+    @Override
+    public void visit(EBinary expression) {
+        b.append("<EBinary>");
+    }
+
+    @Override
+    public void visit(EBlock expression) {
+        b.append("<EBlock>");
+    }
+
+    @Override
+    public void visit(EPreLet expression) {
+        b.append("<EPreLet>");
+    }
+
+    @Override
+    public void visit(ERange expression) {
+        b.append('[');
+        expression.from.accept(this);
+        b.append("..");
+        expression.to.accept(this);
+        b.append(']');
+    }
+
+    @Override
+    public void visit(ERecord expression) {
+        b.append("<ERecord>");
+    }
+
+    @Override
+    public void visit(EStringLiteral expression) {
+        b.append('"');
+        for(int i=0;i<expression.strings.length;++i) {
+            b.append(expression.strings[i]);
+            if(i < expression.expressions.length) {
+                b.append("\\(");
+                expression.expressions[i].accept(this);
+                b.append(')');
+            }
+        }
+        b.append('"');
+    }
+
+    @Override
+    public void visit(EAmbiguous eAmbiguous) {
+        b.append("EAmbigious");
+    }
 }