summaryrefslogtreecommitdiff
path: root/Dafny
diff options
context:
space:
mode:
authorGravatar Rustan Leino <leino@microsoft.com>2012-09-10 12:50:52 -0700
committerGravatar Rustan Leino <leino@microsoft.com>2012-09-10 12:50:52 -0700
commit37b59d5df03233b9c777252a0e96a5c1dfe61877 (patch)
treeb63c3b981442d5126bc5fd6eba275cad896e2934 /Dafny
parent575a7b1acc5404210b3e2d865ffae660d7ab651e (diff)
parentdde158110ed1e9f2517475c7fd6ebdd42c4940e5 (diff)
Merge
Diffstat (limited to 'Dafny')
-rw-r--r--Dafny/Resolver.cs10
-rw-r--r--Dafny/Translator.cs4
2 files changed, 13 insertions, 1 deletions
diff --git a/Dafny/Resolver.cs b/Dafny/Resolver.cs
index 38766b58..53449979 100644
--- a/Dafny/Resolver.cs
+++ b/Dafny/Resolver.cs
@@ -1393,6 +1393,16 @@ namespace Microsoft.Dafny
default:
break;
}
+ } else if (expr is MatchExpr) {
+ var e = (MatchExpr)expr;
+ CoPredicateChecks(e.Source, context, CallingPosition.Neither);
+ e.Cases.Iter(kase => CoPredicateChecks(kase.Body, context, cp));
+ return;
+ } else if (expr is ITEExpr) {
+ var e = (ITEExpr)expr;
+ CoPredicateChecks(e.Test, context, CallingPosition.Neither);
+ CoPredicateChecks(e.Thn, context, cp);
+ CoPredicateChecks(e.Els, context, cp);
} else if (expr is LetExpr) {
var e = (LetExpr)expr;
CoPredicateChecks(e.Body, context, cp);
diff --git a/Dafny/Translator.cs b/Dafny/Translator.cs
index 8ecd93e7..f2011b72 100644
--- a/Dafny/Translator.cs
+++ b/Dafny/Translator.cs
@@ -8089,7 +8089,9 @@ namespace Microsoft.Dafny {
Bpl.Expr Conclusion = new Bpl.ForallExpr(tok, bvs, new Bpl.Trigger(tok, true, new ExprSeq(etran.TrExpr(C))),
Bpl.Expr.Imp(preStuff, etran.TrExpr(C)));
// Now for the antecedent of the axiom
- // TODO: if e.Body uses a 'match' expression, first desugar it into an ordinary expression
+ if (coPredicate.Body is MatchExpr) {
+ return Bpl.Expr.True; // TODO: if coPredicate.Body uses a 'match' expression, first desugar it into an ordinary expression
+ }
var s = new CoinductionSubstituter(coPredicate, receiverReplacement, substMap, pre, boundVars, receiverReplacement, args);
var body = s.Substitute(coPredicate.Body);
Bpl.Expr Antecedent = new Bpl.ForallExpr(tok, bvs, Bpl.Expr.Imp(preStuff, etran.TrExpr(body)));