diff options
author | Jason Koenig <unknown> | 2011-07-11 19:43:42 -0700 |
---|---|---|
committer | Jason Koenig <unknown> | 2011-07-11 19:43:42 -0700 |
commit | dfaffe98c5c317c6fc92431a21bb84900ec6f81d (patch) | |
tree | 6db90e7fc7940f8a2cf19361709498891e991fd7 /Dafny/Resolver.cs | |
parent | d7d64a31349695ddb9406b1819153e2372e9c774 (diff) |
Multiset forming operators added.
Diffstat (limited to 'Dafny/Resolver.cs')
-rw-r--r-- | Dafny/Resolver.cs | 11 |
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) {
|