about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLuqman Aden <me@luqman.ca>2013-06-11 14:53:33 -0400
committerLuqman Aden <laden@csclub.uwaterloo.ca>2013-06-12 02:46:38 -0400
commitc6f3103006f3e91daf4ffbd026ff64d77f858675 (patch)
treee613181934fc214c86bb88abfd8782a5e4cf05c9
parent8fc14b6e626b5f0b98fb0cee425b7813b9de9851 (diff)
downloadrust-c6f3103006f3e91daf4ffbd026ff64d77f858675.tar.gz
rust-c6f3103006f3e91daf4ffbd026ff64d77f858675.zip
librustc: Don't allow duplicate methods on impls.
-rw-r--r--src/librustc/middle/resolve.rs16
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)));
+                            }
+                        }
                     }
                 }