diff options
| author | Joshua Nelson <jyn514@gmail.com> | 2020-06-06 17:09:31 -0400 |
|---|---|---|
| committer | Joshua Nelson <jyn514@gmail.com> | 2020-06-06 17:09:31 -0400 |
| commit | ff327c87e380ed34f6304531a8b46ad0a0124082 (patch) | |
| tree | 3e05e2806c92a40aee81e85fef0ceddff95f4bd6 | |
| parent | 47c3158c3d797f75f0f7b2b2a977179668919dab (diff) | |
| download | rust-ff327c87e380ed34f6304531a8b46ad0a0124082.tar.gz rust-ff327c87e380ed34f6304531a8b46ad0a0124082.zip | |
Add comments to `Resolve::get_module`
| -rw-r--r-- | src/librustc_resolve/build_reduced_graph.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index 9ee3d989bf3..2ae063660e3 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -95,24 +95,30 @@ impl<'a> Resolver<'a> { } crate fn get_module(&mut self, def_id: DefId) -> Module<'a> { + // If this is a local module, it will be in `module_map`, no need to recalculate it. if let Some(def_id) = def_id.as_local() { return self.module_map[&def_id]; } + // Cache module resolution if let Some(&module) = self.extern_module_map.get(&def_id) { return module; } let (name, parent) = if def_id.index == CRATE_DEF_INDEX { + // This is the crate root (self.cstore().crate_name_untracked(def_id.krate), None) } else { let def_key = self.cstore().def_key(def_id); ( + // This unwrap is safe: crates must always have a name def_key.disambiguated_data.data.get_opt_name().unwrap(), + // This unwrap is safe since we know this isn't the root Some(self.get_module(DefId { index: def_key.parent.unwrap(), ..def_id })), ) }; + // Allocate and return a new module with the information we found let kind = ModuleKind::Def(DefKind::Mod, def_id, name); let module = self.arenas.alloc_module(ModuleData::new( parent, |
