summaryrefslogtreecommitdiff
path: root/Dafny/Resolver.cs
diff options
context:
space:
mode:
authorGravatar Jason Koenig <unknown>2011-07-11 19:43:42 -0700
committerGravatar Jason Koenig <unknown>2011-07-11 19:43:42 -0700
commitdfaffe98c5c317c6fc92431a21bb84900ec6f81d (patch)
tree6db90e7fc7940f8a2cf19361709498891e991fd7 /Dafny/Resolver.cs
parentd7d64a31349695ddb9406b1819153e2372e9c774 (diff)
Multiset forming operators added.
Diffstat (limited to 'Dafny/Resolver.cs')
-rw-r--r--Dafny/Resolver.cs11
1 files changed, 9 insertions, 2 deletions
diff --git a/Dafny/Resolver.cs b/Dafny/Resolver.cs
index 19a0da05..2b3128ae 100644
--- a/Dafny/Resolver.cs
+++ b/Dafny/Resolver.cs
@@ -2390,7 +2390,7 @@ namespace Microsoft.Dafny {
} else if (expr is FunctionCallExpr) {
FunctionCallExpr e = (FunctionCallExpr)expr;
ResolveFunctionCallExpr(e, twoState, false);
-
+
} else if (expr is OldExpr) {
OldExpr e = (OldExpr)expr;
if (!twoState) {
@@ -2398,7 +2398,14 @@ namespace Microsoft.Dafny {
}
ResolveExpression(e.E, twoState);
expr.Type = e.E.Type;
-
+
+ } else if (expr is MultiSetFormingExpr) {
+ MultiSetFormingExpr e = (MultiSetFormingExpr)expr;
+ ResolveExpression(e.E, twoState);
+ if (!UnifyTypes(e.E.Type, new SetType(new InferredTypeProxy())) && !UnifyTypes(e.E.Type, new SeqType(new InferredTypeProxy()))) {
+ Error(e.tok, "can only form a multiset from a seq or set.");
+ }
+ expr.Type = new MultiSetType(((CollectionType)e.E.Type).Arg);
} else if (expr is FreshExpr) {
FreshExpr e = (FreshExpr)expr;
if (!twoState) {