summaryrefslogtreecommitdiff
path: root/Source/Dafny/Resolver.cs
diff options
context:
space:
mode:
authorGravatar Rustan Leino <unknown>2013-08-06 03:52:25 -0700
committerGravatar Rustan Leino <unknown>2013-08-06 03:52:25 -0700
commitdd65717941251e2be9df829694a42ec4d015bb53 (patch)
tree87a044a7a8a16d569aa3bb969df08c367b14ed73 /Source/Dafny/Resolver.cs
parent739d4aeff0124e69e30f17880d403b59fd008670 (diff)
Allow calls to side-effect-free ghost methods from expressions
Diffstat (limited to 'Source/Dafny/Resolver.cs')
-rw-r--r--Source/Dafny/Resolver.cs11
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/Dafny/Resolver.cs b/Source/Dafny/Resolver.cs
index 7db8592d..13c1b984 100644
--- a/Source/Dafny/Resolver.cs
+++ b/Source/Dafny/Resolver.cs
@@ -5767,7 +5767,16 @@ namespace Microsoft.Dafny
} else if (expr is StmtExpr) {
var e = (StmtExpr)expr;
int prevErrorCount = ErrorCount;
- ResolveStatement(e.S, twoState, codeContext);
+ ResolveStatement(e.S, true, codeContext);
+ if (ErrorCount == prevErrorCount) {
+ var r = e.S as UpdateStmt;
+ if (r != null && r.ResolvedStatements.Count == 1) {
+ var call = r.ResolvedStatements[0] as CallStmt;
+ if (call.Method.Mod.Expressions.Count != 0) {
+ Error(call, "calls to methods with side-effects are not allowed inside a statement expression");
+ }
+ }
+ }
ResolveExpression(e.E, twoState, codeContext);
Contract.Assert(e.E.Type != null); // follows from postcondition of ResolveExpression
expr.Type = e.E.Type;