From c558eecdcd6444919c0314043c0f328c85ca3b22 Mon Sep 17 00:00:00 2001 From: qunyanm Date: Fri, 26 Feb 2016 16:50:38 -0800 Subject: Fix issue 139. Allow bound variables in nested case patterns to shadow variables declared outside the enclosing match. --- Source/Dafny/Resolver.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Source') diff --git a/Source/Dafny/Resolver.cs b/Source/Dafny/Resolver.cs index 5a63b4e3..d3b59b51 100644 --- a/Source/Dafny/Resolver.cs +++ b/Source/Dafny/Resolver.cs @@ -6376,7 +6376,12 @@ namespace Microsoft.Dafny if (topLevel) { ScopePushAndReport(scope, v, "parameter"); } else { - if (scope.Find(v.Name) != null) { + // For cons(a, const(b, c)): + // this handles check to see if 'b' or 'c' is duplicate with 'a', + // the duplication check between 'b' and 'c' is handled in the desugared + // form (to avoid reporting the same error twice), that is why we don't + // push 'b' and 'c' onto the scope, only find. + if (scope.FindInCurrentScope(v.Name) != null) { reporter.Error(MessageSource.Resolver, v, "Duplicate parameter name: {0}", v.Name); } } @@ -11069,6 +11074,11 @@ namespace Microsoft.Dafny return Find(name, false); } + public Thing FindInCurrentScope(string name) { + Contract.Requires(name != null); + return Find(name, true); + } + public bool ContainsDecl(Thing t) { return things.Exists(thing => thing == t); } -- cgit v1.2.3