Skip to content

Commit 5728c53

Browse files
committed
Use HirId as key for ResolverOutputs::trait_map instead of NodeId
1 parent 06c9fef commit 5728c53

File tree

4 files changed

+23
-7
lines changed

4 files changed

+23
-7
lines changed

src/librustc_hir/definitions.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,9 @@ impl Definitions {
327327

328328
#[inline]
329329
pub fn local_def_id(&self, node: ast::NodeId) -> LocalDefId {
330-
self.opt_local_def_id(node).unwrap()
330+
self.opt_local_def_id(node).unwrap_or_else(|| {
331+
panic!("no entry for node id: `{:?}` / `{:?}`", node, self.opt_node_id_to_hir_id(node))
332+
})
331333
}
332334

333335
#[inline]

src/librustc_middle/ty/context.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,8 +1113,7 @@ impl<'tcx> TyCtxt<'tcx> {
11131113
};
11141114

11151115
let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default();
1116-
for (k, v) in resolutions.trait_map {
1117-
let hir_id = definitions.node_id_to_hir_id(k);
1116+
for (hir_id, v) in resolutions.trait_map.into_iter() {
11181117
let map = trait_map.entry(hir_id.owner).or_default();
11191118
let v = v
11201119
.into_iter()

src/librustc_middle/ty/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use rustc_hir as hir;
3131
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Namespace, Res};
3232
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX};
3333
use rustc_hir::lang_items::{FnMutTraitLangItem, FnOnceTraitLangItem, FnTraitLangItem};
34-
use rustc_hir::{Constness, GlobMap, Node, TraitMap};
34+
use rustc_hir::{Constness, GlobMap, Node};
3535
use rustc_index::vec::{Idx, IndexVec};
3636
use rustc_macros::HashStable;
3737
use rustc_serialize::{self, Encodable, Encoder};
@@ -121,7 +121,7 @@ pub struct ResolverOutputs {
121121
pub definitions: rustc_hir::definitions::Definitions,
122122
pub cstore: Box<CrateStoreDyn>,
123123
pub extern_crate_map: NodeMap<CrateNum>,
124-
pub trait_map: TraitMap<NodeId>,
124+
pub trait_map: FxHashMap<hir::HirId, Vec<hir::TraitCandidate<NodeId>>>,
125125
pub maybe_unused_trait_imports: NodeSet,
126126
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
127127
pub export_map: ExportMap<NodeId>,

src/librustc_resolve/lib.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// ignore-tidy-filelength
2+
13
//! This crate is responsible for the part of name resolution that doesn't require type checker.
24
//!
35
//! Module structure of the crate is built here.
@@ -1271,12 +1273,19 @@ impl<'a> Resolver<'a> {
12711273
}
12721274

12731275
pub fn into_outputs(self) -> ResolverOutputs {
1276+
let trait_map = {
1277+
let mut map = FxHashMap::default();
1278+
for (k, v) in self.trait_map.into_iter() {
1279+
map.insert(self.definitions.node_id_to_hir_id(k), v);
1280+
}
1281+
map
1282+
};
12741283
ResolverOutputs {
12751284
definitions: self.definitions,
12761285
cstore: Box::new(self.crate_loader.into_cstore()),
12771286
extern_crate_map: self.extern_crate_map,
12781287
export_map: self.export_map,
1279-
trait_map: self.trait_map,
1288+
trait_map,
12801289
glob_map: self.glob_map,
12811290
maybe_unused_trait_imports: self.maybe_unused_trait_imports,
12821291
maybe_unused_extern_crates: self.maybe_unused_extern_crates,
@@ -1294,7 +1303,13 @@ impl<'a> Resolver<'a> {
12941303
cstore: Box::new(self.cstore().clone()),
12951304
extern_crate_map: self.extern_crate_map.clone(),
12961305
export_map: self.export_map.clone(),
1297-
trait_map: self.trait_map.clone(),
1306+
trait_map: {
1307+
let mut map = FxHashMap::default();
1308+
for (k, v) in self.trait_map.iter() {
1309+
map.insert(self.definitions.node_id_to_hir_id(k.clone()), v.clone());
1310+
}
1311+
map
1312+
},
12981313
glob_map: self.glob_map.clone(),
12991314
maybe_unused_trait_imports: self.maybe_unused_trait_imports.clone(),
13001315
maybe_unused_extern_crates: self.maybe_unused_extern_crates.clone(),

0 commit comments

Comments
 (0)