Struct rustc_resolve::ModuleData [−][src]
pub struct ModuleData<'a> {
parent: Option<&'a ModuleData<'a>>,
kind: ModuleKind,
nearest_parent_mod: DefId,
lazy_resolutions: RefCell<FxIndexMap<BindingKey, &'a RefCell<NameResolution<'a>>>>,
populate_on_access: Cell<bool>,
unexpanded_invocations: RefCell<FxHashSet<ExpnId>>,
no_implicit_prelude: bool,
glob_importers: RefCell<Vec<&'a Import<'a>>>,
globs: RefCell<Vec<&'a Import<'a>>>,
traits: RefCell<Option<Box<[(Ident, &'a NameBinding<'a>)]>>>,
span: Span,
expansion: ExpnId,
}Expand description
One node in the tree of modules.
Note that a “module” in resolve is broader than a mod that you declare in Rust code. It may be one of these:
mod- crate root (aka, top-level anonymous module)
enumtrait- curly-braced block with statements
You can use ModuleData::kind to determine the kind of module this is.
Fields
parent: Option<&'a ModuleData<'a>>Expand description
The direct parent module (it may not be a mod, however).
kind: ModuleKindExpand description
What kind of module this is, because this may not be a mod.
nearest_parent_mod: DefIdExpand description
The DefId of the nearest mod item ancestor (which may be this module).
This may be the crate root.
lazy_resolutions: RefCell<FxIndexMap<BindingKey, &'a RefCell<NameResolution<'a>>>>Expand description
Mapping between names and their (possibly in-progress) resolutions in this module. Resolutions in modules from other crates are not populated until accessed.
populate_on_access: Cell<bool>Expand description
True if this is a module from other crate that needs to be populated on access.
unexpanded_invocations: RefCell<FxHashSet<ExpnId>>Expand description
Macro invocations that can expand into items in this module.
no_implicit_prelude: boolExpand description
Whether #[no_implicit_prelude] is active.
glob_importers: RefCell<Vec<&'a Import<'a>>>globs: RefCell<Vec<&'a Import<'a>>>traits: RefCell<Option<Box<[(Ident, &'a NameBinding<'a>)]>>>Expand description
Used to memoize the traits in this module for faster searches through all traits in scope.
span: SpanExpand description
Span of the module itself. Used for error reporting.
expansion: ExpnIdImplementations
impl<'a> ModuleData<'a>[src]
impl<'a> ModuleData<'a>[src]pub(crate) fn new(
parent: Option<&'a ModuleData<'a>>,
kind: ModuleKind,
nearest_parent_mod: DefId,
expansion: ExpnId,
span: Span
) -> Self[src]
parent: Option<&'a ModuleData<'a>>,
kind: ModuleKind,
nearest_parent_mod: DefId,
expansion: ExpnId,
span: Span
) -> Self
pub(crate) fn for_each_child<R, F>(&'a self, resolver: &mut R, f: F) where
R: AsMut<Resolver<'a>>,
F: FnMut(&mut R, Ident, Namespace, &'a NameBinding<'a>), [src]
R: AsMut<Resolver<'a>>,
F: FnMut(&mut R, Ident, Namespace, &'a NameBinding<'a>),
pub(crate) fn ensure_traits<R>(&'a self, resolver: &mut R) where
R: AsMut<Resolver<'a>>, [src]
pub(crate) fn ensure_traits<R>(&'a self, resolver: &mut R) where
R: AsMut<Resolver<'a>>, [src]This modifies self in place. The traits will be stored in self.traits.