From 2cde0265070d65f738b9ee236f7246e765536f08 Mon Sep 17 00:00:00 2001 From: qunyanm Date: Tue, 17 Nov 2015 13:13:40 -0800 Subject: Fix issue 107. Instead of writing out StaticReceiverExpr as null valued LiteralExpr, write out its type instead. --- Source/Dafny/Compiler.cs | 6 ++++-- Test/dafny4/Bug107.dfy | 16 ++++++++++++++++ Test/dafny4/Bug107.dfy.expect | 6 ++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 Test/dafny4/Bug107.dfy create mode 100644 Test/dafny4/Bug107.dfy.expect diff --git a/Source/Dafny/Compiler.cs b/Source/Dafny/Compiler.cs index 82795480..8f199da4 100644 --- a/Source/Dafny/Compiler.cs +++ b/Source/Dafny/Compiler.cs @@ -2310,7 +2310,9 @@ namespace Microsoft.Dafny { Contract.Requires(expr != null); if (expr is LiteralExpr) { LiteralExpr e = (LiteralExpr)expr; - if (e.Value == null) { + if (e is StaticReceiverExpr) { + wr.Write(TypeName(e.Type, wr)); + } else if (e.Value == null) { wr.Write("({0})null", TypeName(e.Type, wr)); } else if (e.Value is bool) { wr.Write((bool)e.Value ? "true" : "false"); @@ -2394,7 +2396,7 @@ namespace Microsoft.Dafny { wr.Write(".@{0}", sf.CompiledName); wr.Write(sf.PostString); } else { - TrParenExpr(e.Obj, wr, inLetExprBody); + TrExpr(e.Obj, wr, inLetExprBody); wr.Write(".@{0}", e.Member.CompileName); } diff --git a/Test/dafny4/Bug107.dfy b/Test/dafny4/Bug107.dfy new file mode 100644 index 00000000..56965d92 --- /dev/null +++ b/Test/dafny4/Bug107.dfy @@ -0,0 +1,16 @@ +// RUN: %dafny /compile:3 "%s" > "%t" +// RUN: %diff "%s.expect" "%t" + +method Main() +{ + var f := Inc; + print(f(4)); +} + +function method Inc(x: int): int +{ + x + 2 +} + + + diff --git a/Test/dafny4/Bug107.dfy.expect b/Test/dafny4/Bug107.dfy.expect new file mode 100644 index 00000000..eaa3aa54 --- /dev/null +++ b/Test/dafny4/Bug107.dfy.expect @@ -0,0 +1,6 @@ + +Dafny program verifier finished with 3 verified, 0 errors +Program compiled successfully +Running... + +6 \ No newline at end of file -- cgit v1.2.3