diff options
| author | marmeladema <xademax@gmail.com> | 2020-05-20 18:35:58 +0100 |
|---|---|---|
| committer | marmeladema <xademax@gmail.com> | 2020-05-21 17:07:47 +0100 |
| commit | 5728c5371dc27aa0572c99c692cede23a019b7ff (patch) | |
| tree | 12c2d8d6bb053531f88b23a1b5a0d2d00256e7dc | |
| parent | 06c9fef822b890054fcefa9a567b57eb6edfe638 (diff) | |
| download | rust-5728c5371dc27aa0572c99c692cede23a019b7ff.tar.gz rust-5728c5371dc27aa0572c99c692cede23a019b7ff.zip | |
Use `HirId` as key for `ResolverOutputs::trait_map` instead of `NodeId`
| -rw-r--r-- | src/librustc_hir/definitions.rs | 4 | ||||
| -rw-r--r-- | src/librustc_middle/ty/context.rs | 3 | ||||
| -rw-r--r-- | src/librustc_middle/ty/mod.rs | 4 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 19 |
4 files changed, 23 insertions, 7 deletions
diff --git a/src/librustc_hir/definitions.rs b/src/librustc_hir/definitions.rs index 30cddac6aac..c7a0822d27d 100644 --- a/src/librustc_hir/definitions.rs +++ b/src/librustc_hir/definitions.rs @@ -327,7 +327,9 @@ impl Definitions { #[inline] pub fn local_def_id(&self, node: ast::NodeId) -> LocalDefId { - self.opt_local_def_id(node).unwrap() + self.opt_local_def_id(node).unwrap_or_else(|| { + panic!("no entry for node id: `{:?}` / `{:?}`", node, self.opt_node_id_to_hir_id(node)) + }) } #[inline] diff --git a/src/librustc_middle/ty/context.rs b/src/librustc_middle/ty/context.rs index d2e53facf5e..a09d1c16986 100644 --- a/src/librustc_middle/ty/context.rs +++ b/src/librustc_middle/ty/context.rs @@ -1113,8 +1113,7 @@ impl<'tcx> TyCtxt<'tcx> { }; let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default(); - for (k, v) in resolutions.trait_map { - let hir_id = definitions.node_id_to_hir_id(k); + for (hir_id, v) in resolutions.trait_map.into_iter() { let map = trait_map.entry(hir_id.owner).or_default(); let v = v .into_iter() diff --git a/src/librustc_middle/ty/mod.rs b/src/librustc_middle/ty/mod.rs index 36bc44f5e50..4b9f77b4b4b 100644 --- a/src/librustc_middle/ty/mod.rs +++ b/src/librustc_middle/ty/mod.rs @@ -31,7 +31,7 @@ use rustc_hir as hir; use rustc_hir::def::{CtorKind, CtorOf, DefKind, Namespace, Res}; use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX}; use rustc_hir::lang_items::{FnMutTraitLangItem, FnOnceTraitLangItem, FnTraitLangItem}; -use rustc_hir::{Constness, GlobMap, Node, TraitMap}; +use rustc_hir::{Constness, GlobMap, Node}; use rustc_index::vec::{Idx, IndexVec}; use rustc_macros::HashStable; use rustc_serialize::{self, Encodable, Encoder}; @@ -121,7 +121,7 @@ pub struct ResolverOutputs { pub definitions: rustc_hir::definitions::Definitions, pub cstore: Box<CrateStoreDyn>, pub extern_crate_map: NodeMap<CrateNum>, - pub trait_map: TraitMap<NodeId>, + pub trait_map: FxHashMap<hir::HirId, Vec<hir::TraitCandidate<NodeId>>>, pub maybe_unused_trait_imports: NodeSet, pub maybe_unused_extern_crates: Vec<(NodeId, Span)>, pub export_map: ExportMap<NodeId>, diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index bfb7f081fc3..625ca5dec50 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1,3 +1,5 @@ +// ignore-tidy-filelength + //! This crate is responsible for the part of name resolution that doesn't require type checker. //! //! Module structure of the crate is built here. @@ -1271,12 +1273,19 @@ impl<'a> Resolver<'a> { } pub fn into_outputs(self) -> ResolverOutputs { + let trait_map = { + let mut map = FxHashMap::default(); + for (k, v) in self.trait_map.into_iter() { + map.insert(self.definitions.node_id_to_hir_id(k), v); + } + map + }; ResolverOutputs { definitions: self.definitions, cstore: Box::new(self.crate_loader.into_cstore()), extern_crate_map: self.extern_crate_map, export_map: self.export_map, - trait_map: self.trait_map, + trait_map, glob_map: self.glob_map, maybe_unused_trait_imports: self.maybe_unused_trait_imports, maybe_unused_extern_crates: self.maybe_unused_extern_crates, @@ -1294,7 +1303,13 @@ impl<'a> Resolver<'a> { cstore: Box::new(self.cstore().clone()), extern_crate_map: self.extern_crate_map.clone(), export_map: self.export_map.clone(), - trait_map: self.trait_map.clone(), + trait_map: { + let mut map = FxHashMap::default(); + for (k, v) in self.trait_map.iter() { + map.insert(self.definitions.node_id_to_hir_id(k.clone()), v.clone()); + } + map + }, glob_map: self.glob_map.clone(), maybe_unused_trait_imports: self.maybe_unused_trait_imports.clone(), maybe_unused_extern_crates: self.maybe_unused_extern_crates.clone(), |
