diff options
| author | Luqman Aden <me@luqman.ca> | 2013-06-11 14:53:33 -0400 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-06-12 02:46:38 -0400 |
| commit | c6f3103006f3e91daf4ffbd026ff64d77f858675 (patch) | |
| tree | e613181934fc214c86bb88abfd8782a5e4cf05c9 | |
| parent | 8fc14b6e626b5f0b98fb0cee425b7813b9de9851 (diff) | |
| download | rust-c6f3103006f3e91daf4ffbd026ff64d77f858675.tar.gz rust-c6f3103006f3e91daf4ffbd026ff64d77f858675.zip | |
librustc: Don't allow duplicate methods on impls.
| -rw-r--r-- | src/librustc/middle/resolve.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 8c7751c879f..e4be8dac712 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1226,11 +1226,25 @@ impl Resolver { // the same module that declared the type. // Bail out early if there are no static methods. + let mut methods_seen = HashMap::new(); let mut has_static_methods = false; for methods.each |method| { match method.explicit_self.node { sty_static => has_static_methods = true, - _ => {} + _ => { + // Make sure you can't define duplicate methods + let ident = method.ident; + let span = method.span; + let old_sp = methods_seen.find_or_insert(ident, span); + if *old_sp != span { + self.session.span_err(span, + fmt!("duplicate definition of method %s", + *self.session.str_of(ident))); + self.session.span_note(*old_sp, + fmt!("first definition of method %s here", + *self.session.str_of(ident))); + } + } } } |
