summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar qunyanm <unknown>2016-01-05 10:14:00 -0800
committerGravatar qunyanm <unknown>2016-01-05 10:14:00 -0800
commitbfd722fb0f5654fac4c3510625e5eec0a09cdfd1 (patch)
treecc1694a658b47549adae87046ce94824a50556dd
parentd1b680b7e97bd81ed682271717b4f073603bfe75 (diff)
Fix issue 116. Add the missing @ for the generated c# code.
-rw-r--r--Source/Dafny/Compiler.cs3
-rw-r--r--Test/dafny4/Bug116.dfy15
-rw-r--r--Test/dafny4/Bug116.dfy.expect3
3 files changed, 19 insertions, 2 deletions
diff --git a/Source/Dafny/Compiler.cs b/Source/Dafny/Compiler.cs
index 264ecf9b..1a99a8af 100644
--- a/Source/Dafny/Compiler.cs
+++ b/Source/Dafny/Compiler.cs
@@ -2507,8 +2507,7 @@ namespace Microsoft.Dafny {
DatatypeValue dtv = (DatatypeValue)expr;
Contract.Assert(dtv.Ctor != null); // since dtv has been successfully resolved
var typeParams = dtv.InferredTypeArgs.Count == 0 ? "" : string.Format("<{0}>", TypeNames(dtv.InferredTypeArgs, wr));
-
- wr.Write("new {0}{1}(", DtName(dtv.Ctor.EnclosingDatatype), typeParams);
+ wr.Write("new @{0}{1}(", DtName(dtv.Ctor.EnclosingDatatype), typeParams);
if (!dtv.IsCoCall) {
// For an ordinary constructor (that is, one that does not guard any co-recursive calls), generate:
// new Dt_Cons<T>( args )
diff --git a/Test/dafny4/Bug116.dfy b/Test/dafny4/Bug116.dfy
new file mode 100644
index 00000000..9fd30597
--- /dev/null
+++ b/Test/dafny4/Bug116.dfy
@@ -0,0 +1,15 @@
+// RUN: %dafny "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+datatype struct = S // this is ok
+
+method Main()
+{
+ var s := S; // this line generates illegal C# code
+ print s;
+}
+
+
+
+
+
diff --git a/Test/dafny4/Bug116.dfy.expect b/Test/dafny4/Bug116.dfy.expect
new file mode 100644
index 00000000..b0cf7300
--- /dev/null
+++ b/Test/dafny4/Bug116.dfy.expect
@@ -0,0 +1,3 @@
+
+Dafny program verifier finished with 2 verified, 0 errors
+Compiled assembly into Bug116.exe