1111use { AmbiguityError , CrateLint , Resolver , ResolutionError , is_known_tool, resolve_error} ;
1212use { Module , ModuleKind , NameBinding , NameBindingKind , PathResult , ToNameBinding } ;
1313use ModuleOrUniformRoot ;
14- use Namespace :: { self , TypeNS , MacroNS } ;
14+ use Namespace :: { self , * } ;
1515use build_reduced_graph:: { BuildReducedGraphVisitor , IsMacroExport } ;
1616use resolve_imports:: ImportResolver ;
1717use rustc:: hir:: def_id:: { DefId , CRATE_DEF_INDEX , DefIndex ,
@@ -547,7 +547,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
547547 // 1. Not controlled (user-defined) names should have higher priority than controlled names
548548 // built into the language or standard library. This way we can add new names into the
549549 // language or standard library without breaking user code.
550- // 2. "Closed set" below means new names can appear after the current resolution attempt.
550+ // 2. "Closed set" below means new names cannot appear after the current resolution attempt.
551551 // Places to search (in order of decreasing priority):
552552 // (Type NS)
553553 // 1. FIXME: Ribs (type parameters), there's no necessary infrastructure yet
@@ -558,6 +558,12 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
558558 // 4. Tool modules (closed, controlled right now, but not in the future).
559559 // 5. Standard library prelude (de-facto closed, controlled).
560560 // 6. Language prelude (closed, controlled).
561+ // (Value NS)
562+ // 1. FIXME: Ribs (local variables), there's no necessary infrastructure yet
563+ // (open set, not controlled).
564+ // 2. Names in modules (both normal `mod`ules and blocks), loop through hygienic parents
565+ // (open, not controlled).
566+ // 3. Standard library prelude (de-facto closed, controlled).
561567 // (Macro NS)
562568 // 0. Derive helpers (open, not controlled). All ambiguities with other names
563569 // are currently reported as errors. They should be higher in priority than preludes
@@ -584,7 +590,6 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
584590 // N (unordered). Legacy plugin helpers (open, not controlled). Similar to derive helpers,
585591 // but introduced by legacy plugins using `register_attribute`.
586592
587- assert ! ( ns == TypeNS || ns == MacroNS ) ;
588593 assert ! ( force || !record_used) ; // `record_used` implies `force`
589594 ident = ident. modern ( ) ;
590595
@@ -746,10 +751,10 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
746751 Some ( parent_module) => WhereToResolve :: Module ( parent_module) ,
747752 None => {
748753 use_prelude = !module. no_implicit_prelude;
749- if ns == MacroNS {
750- WhereToResolve :: MacroUsePrelude
751- } else {
752- WhereToResolve :: ExternPrelude
754+ match ns {
755+ TypeNS => WhereToResolve :: ExternPrelude ,
756+ ValueNS => WhereToResolve :: StdLibPrelude ,
757+ MacroNS => WhereToResolve :: MacroUsePrelude ,
753758 }
754759 }
755760 }
@@ -761,7 +766,11 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
761766 WhereToResolve :: LegacyPluginHelpers => break , // nowhere else to search
762767 WhereToResolve :: ExternPrelude => WhereToResolve :: ToolPrelude ,
763768 WhereToResolve :: ToolPrelude => WhereToResolve :: StdLibPrelude ,
764- WhereToResolve :: StdLibPrelude => WhereToResolve :: BuiltinTypes ,
769+ WhereToResolve :: StdLibPrelude => match ns {
770+ TypeNS => WhereToResolve :: BuiltinTypes ,
771+ ValueNS => break , // nowhere else to search
772+ MacroNS => unreachable!( ) ,
773+ }
765774 WhereToResolve :: BuiltinTypes => break , // nowhere else to search
766775 } ;
767776
0 commit comments