summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorGravatar qunyanm <unknown>2015-04-17 15:22:24 -0700
committerGravatar qunyanm <unknown>2015-04-17 15:22:24 -0700
commitd248da33b7763b8c3b2ef75ece9612a45182e7b0 (patch)
treefc7d59235c8ec55510ea18d8be3b579b38c3a481 /Source
parente4419c2e8d5469787f997fbf0e74f9ef8383c140 (diff)
Fix issue #69. If we can't find a member in classMembers, search the static
members of the enclosing module or its imports.
Diffstat (limited to 'Source')
-rw-r--r--Source/Dafny/Resolver.cs13
1 files changed, 12 insertions, 1 deletions
diff --git a/Source/Dafny/Resolver.cs b/Source/Dafny/Resolver.cs
index b25b8cbe..7f198946 100644
--- a/Source/Dafny/Resolver.cs
+++ b/Source/Dafny/Resolver.cs
@@ -6109,7 +6109,18 @@ namespace Microsoft.Dafny
if (memberName == "_ctor") {
Error(tok, "{0} {1} does not have an anonymous constructor", kind, ctype.Name);
} else {
- Error(tok, "member {0} does not exist in {2} {1}", memberName, ctype.Name, kind);
+ // search the static members of the enclosing module or its imports
+ if (moduleInfo.StaticMembers.TryGetValue(memberName, out member)) {
+ Contract.Assert(member.IsStatic); // moduleInfo.StaticMembers is supposed to contain only static members of the module's implicit class _default
+ if (ReallyAmbiguousThing(ref member)) {
+ Error(tok, "The name {0} ambiguously refers to a static member in one of the modules {1} (try qualifying the member name with the module name)", memberName, ((AmbiguousMemberDecl)member).ModuleNames());
+ } else {
+ nptype = GetReceiverType(tok, member);
+ return member;
+ }
+ } else {
+ Error(tok, "member {0} does not exist in {2} {1}", memberName, ctype.Name, kind);
+ }
}
return null;
} else {