11
11
use { AmbiguityError , CrateLint , Resolver , ResolutionError , is_known_tool, resolve_error} ;
12
12
use { Module , ModuleKind , NameBinding , NameBindingKind , PathResult , ToNameBinding } ;
13
13
use ModuleOrUniformRoot ;
14
- use Namespace :: { self , TypeNS , MacroNS } ;
14
+ use Namespace :: { self , * } ;
15
15
use build_reduced_graph:: { BuildReducedGraphVisitor , IsMacroExport } ;
16
16
use resolve_imports:: ImportResolver ;
17
17
use rustc:: hir:: def_id:: { DefId , CRATE_DEF_INDEX , DefIndex ,
@@ -547,7 +547,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
547
547
// 1. Not controlled (user-defined) names should have higher priority than controlled names
548
548
// built into the language or standard library. This way we can add new names into the
549
549
// 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.
551
551
// Places to search (in order of decreasing priority):
552
552
// (Type NS)
553
553
// 1. FIXME: Ribs (type parameters), there's no necessary infrastructure yet
@@ -558,6 +558,12 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
558
558
// 4. Tool modules (closed, controlled right now, but not in the future).
559
559
// 5. Standard library prelude (de-facto closed, controlled).
560
560
// 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).
561
567
// (Macro NS)
562
568
// 0. Derive helpers (open, not controlled). All ambiguities with other names
563
569
// are currently reported as errors. They should be higher in priority than preludes
@@ -584,7 +590,6 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
584
590
// N (unordered). Legacy plugin helpers (open, not controlled). Similar to derive helpers,
585
591
// but introduced by legacy plugins using `register_attribute`.
586
592
587
- assert ! ( ns == TypeNS || ns == MacroNS ) ;
588
593
assert ! ( force || !record_used) ; // `record_used` implies `force`
589
594
ident = ident. modern ( ) ;
590
595
@@ -746,10 +751,10 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
746
751
Some ( parent_module) => WhereToResolve :: Module ( parent_module) ,
747
752
None => {
748
753
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 ,
753
758
}
754
759
}
755
760
}
@@ -761,7 +766,11 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
761
766
WhereToResolve :: LegacyPluginHelpers => break , // nowhere else to search
762
767
WhereToResolve :: ExternPrelude => WhereToResolve :: ToolPrelude ,
763
768
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
+ }
765
774
WhereToResolve :: BuiltinTypes => break , // nowhere else to search
766
775
} ;
767
776
0 commit comments