librustc: Don't allow duplicate methods on a trait.

This commit is contained in:
Luqman Aden 2013-06-11 14:19:47 -04:00 committed by Luqman Aden
parent 4a52ff0786
commit 8fc14b6e62

View File

@ -1333,7 +1333,7 @@ impl Resolver {
}
// Add the names of all the methods to the trait info.
let mut method_names = HashSet::new();
let mut method_names = HashMap::new();
for methods.each |method| {
let ty_m = trait_method_to_ty_method(method);
@ -1357,13 +1357,22 @@ impl Resolver {
ty_m.span);
}
_ => {
method_names.insert(ident);
// Make sure you can't define duplicate methods
let old_sp = method_names.find_or_insert(ident, ty_m.span);
if *old_sp != ty_m.span {
self.session.span_err(ty_m.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)));
}
}
}
}
let def_id = local_def(item.id);
for method_names.each |name| {
for method_names.each |name, _| {
if !self.method_map.contains_key(name) {
self.method_map.insert(*name, HashSet::new());
}