@@ -294,18 +294,6 @@ pub enum DuplicateCheckingMode {
294294 OverwriteDuplicates
295295}
296296
297- // Returns the namespace associated with the given duplicate checking mode,
298- // or fails for OverwriteDuplicates. This is used for error messages.
299- pub fn namespace_for_duplicate_checking_mode ( mode : DuplicateCheckingMode )
300- -> Namespace {
301- match mode {
302- ForbidDuplicateModules | ForbidDuplicateTypes |
303- ForbidDuplicateTypesAndValues => TypeNS ,
304- ForbidDuplicateValues => ValueNS ,
305- OverwriteDuplicates => fail ! ( "OverwriteDuplicates has no namespace" )
306- }
307- }
308-
309297/// One local scope.
310298pub struct Rib {
311299 bindings : @mut HashMap < ident , def_like > ,
@@ -1007,37 +995,43 @@ impl Resolver {
1007995 // nothing.
1008996
1009997 let mut is_duplicate = false ;
1010- match duplicate_checking_mode {
998+ let ns = match duplicate_checking_mode {
1011999 ForbidDuplicateModules => {
1012- is_duplicate =
1013- child . get_module_if_available ( ) . is_some ( ) ;
1000+ is_duplicate = child . get_module_if_available ( ) . is_some ( ) ;
1001+ Some ( TypeNS )
10141002 }
10151003 ForbidDuplicateTypes => {
10161004 match child. def_for_namespace ( TypeNS ) {
10171005 Some ( def_mod( _) ) | None => { }
10181006 Some ( _) => is_duplicate = true
10191007 }
1008+ Some ( TypeNS )
10201009 }
10211010 ForbidDuplicateValues => {
10221011 is_duplicate = child. defined_in_namespace ( ValueNS ) ;
1012+ Some ( ValueNS )
10231013 }
10241014 ForbidDuplicateTypesAndValues => {
1015+ let mut n = None ;
10251016 match child. def_for_namespace ( TypeNS ) {
10261017 Some ( def_mod( _) ) | None => { }
1027- Some ( _) => is_duplicate = true
1018+ Some ( _) => {
1019+ n = Some ( TypeNS ) ;
1020+ is_duplicate = true ;
1021+ }
10281022 } ;
10291023 if child. defined_in_namespace ( ValueNS ) {
10301024 is_duplicate = true ;
1025+ n = Some ( ValueNS ) ;
10311026 }
1027+ n
10321028 }
1033- OverwriteDuplicates => { }
1034- }
1035- if duplicate_checking_mode != OverwriteDuplicates &&
1036- is_duplicate {
1029+ OverwriteDuplicates => None
1030+ } ;
1031+ if is_duplicate {
10371032 // Return an error here by looking up the namespace that
10381033 // had the duplicate.
1039- let ns = namespace_for_duplicate_checking_mode (
1040- duplicate_checking_mode) ;
1034+ let ns = ns. unwrap ( ) ;
10411035 self . session . span_err ( sp,
10421036 fmt ! ( "duplicate definition of %s `%s`" ,
10431037 namespace_to_str( ns) ,
0 commit comments