Skip to content

Commit 05a4681

Browse files
committed
resolve: Support value namespace in fn resolve_lexical_macro_path_segment
1 parent 7b69088 commit 05a4681

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/librustc_resolve/macros.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use {AmbiguityError, CrateLint, Resolver, ResolutionError, is_known_tool, resolve_error};
1212
use {Module, ModuleKind, NameBinding, NameBindingKind, PathResult, ToNameBinding};
1313
use ModuleOrUniformRoot;
14-
use Namespace::{self, TypeNS, MacroNS};
14+
use Namespace::{self, *};
1515
use build_reduced_graph::{BuildReducedGraphVisitor, IsMacroExport};
1616
use resolve_imports::ImportResolver;
1717
use 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

Comments
 (0)