summaryrefslogtreecommitdiff
path: root/Source/Dafny/Printer.cs
diff options
context:
space:
mode:
authorGravatar leino <unknown>2014-08-13 00:42:38 -0700
committerGravatar leino <unknown>2014-08-13 00:42:38 -0700
commit9f24fd54271e0e70aba494905416f58ff0348c7c (patch)
tree3d059a0abd1f71a4d99387e261ae2829e1bf2262 /Source/Dafny/Printer.cs
parent7456be76add1e5d52001657df80d0e3cb00d5065 (diff)
parentbc4e2c251a29902d7421f313aa3c55ba203d1608 (diff)
Merge
Diffstat (limited to 'Source/Dafny/Printer.cs')
-rw-r--r--Source/Dafny/Printer.cs39
1 files changed, 36 insertions, 3 deletions
diff --git a/Source/Dafny/Printer.cs b/Source/Dafny/Printer.cs
index 73568fcf..349c954a 100644
--- a/Source/Dafny/Printer.cs
+++ b/Source/Dafny/Printer.cs
@@ -1265,8 +1265,8 @@ namespace Microsoft.Dafny {
wr.Write(e.SuffixName);
if (parensNeeded) { wr.Write(")"); }
- } else if (expr is FieldSelectExpr) {
- FieldSelectExpr e = (FieldSelectExpr)expr;
+ } else if (expr is MemberSelectExpr) {
+ MemberSelectExpr e = (MemberSelectExpr)expr;
// determine if parens are needed
int opBindingStrength = 0x70;
bool parensNeeded = !(e.Obj is ImplicitThisExpr) &&
@@ -1278,7 +1278,7 @@ namespace Microsoft.Dafny {
PrintExpr(e.Obj, opBindingStrength, false, false, !parensNeeded && isFollowedBySemicolon, -1);
wr.Write(".");
}
- wr.Write(e.FieldName);
+ wr.Write(e.MemberName);
if (parensNeeded) { wr.Write(")"); }
} else if (expr is SeqSelectExpr) {
@@ -1347,6 +1347,23 @@ namespace Microsoft.Dafny {
wr.Write("]");
if (parensNeeded) { wr.Write(")"); }
}
+ } else if (expr is ApplyExpr) {
+ var e = (ApplyExpr)expr;
+ // determine if parens are needed
+ int opBindingStrength = 0x70;
+ bool parensNeeded =
+ opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded) { wr.Write("("); }
+
+ PrintExpr(e.Receiver, opBindingStrength, false, false, !parensNeeded && isFollowedBySemicolon, -1);
+ wr.Write("(");
+ PrintExpressionList(e.Args, false);
+ wr.Write(")");
+
+ if (parensNeeded) { wr.Write(")"); }
+
} else if (expr is FunctionCallExpr) {
var e = (FunctionCallExpr)expr;
// determine if parens are needed
@@ -1636,6 +1653,22 @@ namespace Microsoft.Dafny {
wr.Write(" :: ");
PrintExpression(e.Term, !parensNeeded && isFollowedBySemicolon);
if (parensNeeded) { wr.Write(")"); }
+
+ } else if (expr is LambdaExpr) {
+ var e = (LambdaExpr)expr;
+ wr.Write("(");
+ wr.Write(Util.Comma(e.BoundVars, bv => bv.DisplayName + ":" + bv.Type));
+ wr.Write(")");
+ if (e.Range != null) {
+ wr.Write(" requires ");
+ PrintExpression(e.Range, false);
+ }
+ foreach (var read in e.Reads) {
+ wr.Write(" reads ");
+ PrintExpression(read.E, false);
+ }
+ wr.Write(e.OneShot ? " -> " : " => ");
+ PrintExpression(e.Body, isFollowedBySemicolon);
} else if (expr is WildcardExpr) {
wr.Write("*");