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=c5f8f3621187b02caf6e19b4437071bddbd4105c;hb=cb5fc8d606d8b322563e9345c441eecfa7f01753;hpb=969bd23cab98a79ca9101af33334000879fb60c5 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 c5f8f3621..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,13 +2,19 @@ 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; import org.simantics.scl.compiler.elaboration.expressions.EEquations; import org.simantics.scl.compiler.elaboration.expressions.EError; @@ -25,7 +31,6 @@ 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.ECoveringBranchPoint; import org.simantics.scl.compiler.elaboration.expressions.ERealLiteral; import org.simantics.scl.compiler.elaboration.expressions.ERuleset; import org.simantics.scl.compiler.elaboration.expressions.ESelect; @@ -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) { @@ -331,7 +348,7 @@ public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisito ESimpleLet let = (ESimpleLet)expression; Variable variable = let.getVariable(); Expression value = let.getValue(); - if("_".equals(variable.getName())) + if(variable == null || "_".equals(variable.getName())) printAsDo(value); else { newLine(); @@ -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); + } + } }