summaryrefslogtreecommitdiff
path: root/Source/ExecutionEngine/VerificationResultCache.cs
diff options
context:
space:
mode:
authorGravatar wuestholz <unknown>2014-10-15 22:59:06 +0200
committerGravatar wuestholz <unknown>2014-10-15 22:59:06 +0200
commit2be6834c03da69c9500b24799c604dc45e868964 (patch)
tree91fd066abf41bb8c1f7561749fdfa1bfe4320e88 /Source/ExecutionEngine/VerificationResultCache.cs
parentcd7941ab040ad7c8c61e438ba7f249458e4c7f90 (diff)
Did some refactoring.
Diffstat (limited to 'Source/ExecutionEngine/VerificationResultCache.cs')
-rw-r--r--Source/ExecutionEngine/VerificationResultCache.cs24
1 files changed, 14 insertions, 10 deletions
diff --git a/Source/ExecutionEngine/VerificationResultCache.cs b/Source/ExecutionEngine/VerificationResultCache.cs
index 6a49d51c..bc529849 100644
--- a/Source/ExecutionEngine/VerificationResultCache.cs
+++ b/Source/ExecutionEngine/VerificationResultCache.cs
@@ -222,12 +222,6 @@ namespace Microsoft.Boogie
{
if (DependencyCollector.AllFunctionDependenciesAreDefinedAndUnchanged(oldProc, Program))
{
- var lv = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken, string.Format("a##post##{0}", FreshAssumptionVariableName), Type.Bool),
- new QKeyValue(Token.NoToken, "assumption", new List<object>(), null));
- node.AssignedAssumptionVariable = lv;
- currentImplementation.InjectAssumptionVariable(lv);
-
var before = new List<Cmd>();
if (oldProc.Requires.Any())
{
@@ -236,6 +230,7 @@ namespace Microsoft.Boogie
before.Add(assume);
}
+ var after = new List<Cmd>();
var post = node.Postcondition(oldProc, Program);
var mods = node.UnmodifiedBefore(oldProc);
foreach (var m in mods)
@@ -248,11 +243,20 @@ namespace Microsoft.Boogie
var eq = LiteralExpr.Eq(new IdentifierExpr(Token.NoToken, mPre), new IdentifierExpr(Token.NoToken, m.Decl));
post = LiteralExpr.And(post, eq);
}
- var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, lv));
- var rhs = LiteralExpr.And(new IdentifierExpr(Token.NoToken, lv), post);
- var assumed = new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
- node.ExtendDesugaring(before, new List<Cmd> { assumed });
+ if (post != null)
+ {
+ var lv = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken, string.Format("a##post##{0}", FreshAssumptionVariableName), Type.Bool),
+ new QKeyValue(Token.NoToken, "assumption", new List<object>(), null));
+ node.AssignedAssumptionVariable = lv;
+ currentImplementation.InjectAssumptionVariable(lv);
+ var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, lv));
+ var rhs = LiteralExpr.And(new IdentifierExpr(Token.NoToken, lv), post);
+ var assumed = new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
+ after.Add(assumed);
+ }
+ node.ExtendDesugaring(before, after);
node.ProcDependencyChecksumInPreviousSnapshot = oldProc.DependencyChecksum;
}
}