Skip to content

Commit b5ee867

Browse files
authored
Rollup merge of rust-lang#69108 - cjgillot:trait_candidate, r=Zoxc
Use HirId in TraitCandidate. I had to duplicate the `TraitMap` type to hold `NodeId`s until AST->HIR lowering is done. r? @Zoxc
2 parents fc51170 + 2a899e2 commit b5ee867

File tree

7 files changed

+29
-18
lines changed

7 files changed

+29
-18
lines changed

src/librustc/ich/impls_hir.rs

-1
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@ impl<'a> ToStableHashKey<StableHashingContext<'a>> for hir::TraitCandidate {
270270

271271
let import_keys = import_ids
272272
.iter()
273-
.map(|node_id| hcx.node_to_hir_id(*node_id))
274273
.map(|hir_id| (hcx.local_def_path_hash(hir_id.owner), hir_id.local_id))
275274
.collect();
276275
(hcx.def_path_hash(*def_id), import_keys)

src/librustc/ty/context.rs

+4
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,10 @@ impl<'tcx> TyCtxt<'tcx> {
11611161
for (k, v) in resolutions.trait_map {
11621162
let hir_id = hir.node_to_hir_id(k);
11631163
let map = trait_map.entry(hir_id.owner).or_default();
1164+
let v = v
1165+
.into_iter()
1166+
.map(|tc| tc.map_import_ids(|id| hir.definitions().node_to_hir_id(id)))
1167+
.collect();
11641168
map.insert(hir_id.local_id, StableVec::new(v));
11651169
}
11661170

src/librustc/ty/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ pub struct ResolverOutputs {
126126
pub definitions: hir_map::Definitions,
127127
pub cstore: Box<CrateStoreDyn>,
128128
pub extern_crate_map: NodeMap<CrateNum>,
129-
pub trait_map: TraitMap,
129+
pub trait_map: TraitMap<NodeId>,
130130
pub maybe_unused_trait_imports: NodeSet,
131131
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
132132
pub export_map: ExportMap<NodeId>,

src/librustc_hir/hir.rs

+15-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rustc_span::source_map::{SourceMap, Spanned};
1616
use rustc_span::symbol::{kw, sym, Symbol};
1717
use rustc_span::{MultiSpan, Span, DUMMY_SP};
1818
use rustc_target::spec::abi::Abi;
19-
use syntax::ast::{self, AsmDialect, CrateSugar, Ident, Name, NodeId};
19+
use syntax::ast::{self, AsmDialect, CrateSugar, Ident, Name};
2020
use syntax::ast::{AttrVec, Attribute, FloatTy, IntTy, Label, LitKind, StrStyle, UintTy};
2121
pub use syntax::ast::{BorrowKind, ImplPolarity, IsAuto};
2222
pub use syntax::ast::{CaptureBy, Movability, Mutability};
@@ -2608,13 +2608,24 @@ pub type CaptureModeMap = NodeMap<CaptureBy>;
26082608
// has length > 0 if the trait is found through an chain of imports, starting with the
26092609
// import/use statement in the scope where the trait is used.
26102610
#[derive(Clone, Debug)]
2611-
pub struct TraitCandidate {
2611+
pub struct TraitCandidate<ID = HirId> {
26122612
pub def_id: DefId,
2613-
pub import_ids: SmallVec<[NodeId; 1]>,
2613+
pub import_ids: SmallVec<[ID; 1]>,
2614+
}
2615+
2616+
impl<ID> TraitCandidate<ID> {
2617+
pub fn map_import_ids<F, T>(self, f: F) -> TraitCandidate<T>
2618+
where
2619+
F: Fn(ID) -> T,
2620+
{
2621+
let TraitCandidate { def_id, import_ids } = self;
2622+
let import_ids = import_ids.into_iter().map(f).collect();
2623+
TraitCandidate { def_id, import_ids }
2624+
}
26142625
}
26152626

26162627
// Trait method resolution
2617-
pub type TraitMap = NodeMap<Vec<TraitCandidate>>;
2628+
pub type TraitMap<ID = HirId> = NodeMap<Vec<TraitCandidate<ID>>>;
26182629

26192630
// Map from the NodeId of a glob import to a list of items which are actually
26202631
// imported.

src/librustc_resolve/late.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2078,7 +2078,7 @@ impl<'a, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
20782078
&mut self,
20792079
mut ident: Ident,
20802080
ns: Namespace,
2081-
) -> Vec<TraitCandidate> {
2081+
) -> Vec<TraitCandidate<NodeId>> {
20822082
debug!("(getting traits containing item) looking for '{}'", ident.name);
20832083

20842084
let mut found_traits = Vec::new();
@@ -2123,7 +2123,7 @@ impl<'a, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
21232123
ident: Ident,
21242124
ns: Namespace,
21252125
module: Module<'a>,
2126-
found_traits: &mut Vec<TraitCandidate>,
2126+
found_traits: &mut Vec<TraitCandidate<NodeId>>,
21272127
) {
21282128
assert!(ns == TypeNS || ns == ValueNS);
21292129
let mut traits = module.traits.borrow_mut();

src/librustc_resolve/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ pub struct Resolver<'a> {
865865
/// `CrateNum` resolutions of `extern crate` items.
866866
extern_crate_map: NodeMap<CrateNum>,
867867
export_map: ExportMap<NodeId>,
868-
trait_map: TraitMap,
868+
trait_map: TraitMap<NodeId>,
869869

870870
/// A map from nodes to anonymous modules.
871871
/// Anonymous modules are pseudo-modules that are implicitly created around items

src/librustc_typeck/check/method/probe.rs

+6-9
Original file line numberDiff line numberDiff line change
@@ -902,13 +902,10 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
902902
for trait_candidate in applicable_traits.iter() {
903903
let trait_did = trait_candidate.def_id;
904904
if duplicates.insert(trait_did) {
905-
let import_ids = trait_candidate
906-
.import_ids
907-
.iter()
908-
.map(|node_id| self.fcx.tcx.hir().node_to_hir_id(*node_id))
909-
.collect();
910-
let result =
911-
self.assemble_extension_candidates_for_trait(import_ids, trait_did);
905+
let result = self.assemble_extension_candidates_for_trait(
906+
&trait_candidate.import_ids,
907+
trait_did,
908+
);
912909
result?;
913910
}
914911
}
@@ -920,7 +917,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
920917
let mut duplicates = FxHashSet::default();
921918
for trait_info in suggest::all_traits(self.tcx) {
922919
if duplicates.insert(trait_info.def_id) {
923-
self.assemble_extension_candidates_for_trait(smallvec![], trait_info.def_id)?;
920+
self.assemble_extension_candidates_for_trait(&smallvec![], trait_info.def_id)?;
924921
}
925922
}
926923
Ok(())
@@ -959,7 +956,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
959956

960957
fn assemble_extension_candidates_for_trait(
961958
&mut self,
962-
import_ids: SmallVec<[hir::HirId; 1]>,
959+
import_ids: &SmallVec<[hir::HirId; 1]>,
963960
trait_def_id: DefId,
964961
) -> Result<(), MethodError<'tcx>> {
965962
debug!("assemble_extension_candidates_for_trait(trait_def_id={:?})", trait_def_id);

0 commit comments

Comments
 (0)