X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fprinting%2FExpressionToStringVisitor.java;h=ce2af3b929a4f3a53d62d19c622df926a35f4920;hp=6cbdb6f6b19aedef68bf8f69321650fca39123dd;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java index 6cbdb6f6b..ce2af3b92 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/printing/ExpressionToStringVisitor.java @@ -2,12 +2,17 @@ package org.simantics.scl.compiler.elaboration.expressions.printing; import java.util.Map.Entry; +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.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.EApply; import org.simantics.scl.compiler.elaboration.expressions.EApplyType; import org.simantics.scl.compiler.elaboration.expressions.EAsPattern; import org.simantics.scl.compiler.elaboration.expressions.EBind; +import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset; import org.simantics.scl.compiler.elaboration.expressions.EConstant; import org.simantics.scl.compiler.elaboration.expressions.ECoveringBranchPoint; import org.simantics.scl.compiler.elaboration.expressions.EEnforce; @@ -34,6 +39,7 @@ import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet; import org.simantics.scl.compiler.elaboration.expressions.ETransformation; import org.simantics.scl.compiler.elaboration.expressions.ETypeAnnotation; import org.simantics.scl.compiler.elaboration.expressions.EVariable; +import org.simantics.scl.compiler.elaboration.expressions.EViewPattern; import org.simantics.scl.compiler.elaboration.expressions.EWhen; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.ExpressionVisitor; @@ -169,14 +175,16 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito @Override public void visit(EIf expression) { b.append("if "); - expression.getCondition().accept(this); + expression.condition.accept(this); ++indentation; newLine(); b.append("then "); - expression.getThen().accept(this); - newLine(); - b.append("else "); - expression.getElse().accept(this); + expression.then_.accept(this); + if(expression.else_ != null) { + newLine(); + b.append("else "); + expression.else_.accept(this); + } --indentation; } @@ -216,6 +224,15 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito } --indentation; } + + @Override + public void visit(EViewPattern expression) { + b.append('('); + expression.expression.accept(this); + b.append(" -> "); + expression.pattern.accept(this); + b.append(')'); + } @Override public void visit(ELambdaType expression) { @@ -494,4 +511,38 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito public void visit(EEquations eEquations) { b.append("eq"); } + + @Override + public void visit(ECHRRuleset echrRuleset) { + b.append("CHRRuleset"); + } + + public void visit(CHRRule rule) { + visit(rule.head); + b.append(" => "); + visit(rule.body); + } + + public void visit(CHRQuery query) { + boolean first = true; + for(CHRLiteral literal : query.literals) { + if(first) + first = false; + else + b.append(", "); + visit(literal); + } + } + + public void visit(CHRLiteral literal) { + if(literal.passive && literal.relation instanceof CHRConstraint) + b.append("@passive "); + if(literal.killAfterMatch) + b.append('-'); + b.append(literal.relation); + for(Expression parameter : literal.parameters) { + b.append(' '); + showPar(parameter); + } + } }