Skip to content

Commit a42a76d

Browse files
Revert "Make TraitCandidate generic."
This reverts commit 2a899e2.
1 parent 61d9231 commit a42a76d

File tree

5 files changed

+30
-26
lines changed

5 files changed

+30
-26
lines changed

src/librustc/ty/context.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -1161,10 +1161,7 @@ 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();
1164+
let v = v.into_iter().map(|tc| tc.node_to_hir_id(&hir.definitions())).collect();
11681165
map.insert(hir_id.local_id, StableVec::new(v));
11691166
}
11701167

src/librustc/ty/mod.rs

+20-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use rustc_data_structures::sync::{self, par_iter, Lrc, ParallelIterator};
3535
use rustc_hir as hir;
3636
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res};
3737
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE};
38-
use rustc_hir::{Constness, GlobMap, Node, TraitMap};
38+
use rustc_hir::{Constness, GlobMap, Node};
3939
use rustc_index::vec::{Idx, IndexVec};
4040
use rustc_macros::HashStable;
4141
use rustc_serialize::{self, Encodable, Encoder};
@@ -46,6 +46,7 @@ use rustc_target::abi::Align;
4646
use syntax::ast::{self, Ident, Name};
4747
use syntax::node_id::{NodeId, NodeMap, NodeSet};
4848

49+
use smallvec::SmallVec;
4950
use std::cell::RefCell;
5051
use std::cmp::{self, Ordering};
5152
use std::fmt;
@@ -123,11 +124,28 @@ mod sty;
123124

124125
// Data types
125126

127+
#[derive(Clone, Debug)]
128+
pub struct TraitCandidate {
129+
pub def_id: DefId,
130+
pub import_ids: SmallVec<[NodeId; 1]>,
131+
}
132+
133+
impl TraitCandidate {
134+
fn node_to_hir_id(self, definitions: &hir_map::Definitions) -> hir::TraitCandidate {
135+
let TraitCandidate { def_id, import_ids } = self;
136+
let import_ids =
137+
import_ids.into_iter().map(|node_id| definitions.node_to_hir_id(node_id)).collect();
138+
hir::TraitCandidate { def_id, import_ids }
139+
}
140+
}
141+
142+
pub type TraitMap = NodeMap<Vec<TraitCandidate>>;
143+
126144
pub struct ResolverOutputs {
127145
pub definitions: hir_map::Definitions,
128146
pub cstore: Box<CrateStoreDyn>,
129147
pub extern_crate_map: NodeMap<CrateNum>,
130-
pub trait_map: TraitMap<NodeId>,
148+
pub trait_map: TraitMap,
131149
pub maybe_unused_trait_imports: NodeSet,
132150
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
133151
pub export_map: ExportMap<NodeId>,

src/librustc_hir/hir.rs

+3-14
Original file line numberDiff line numberDiff line change
@@ -2610,24 +2610,13 @@ pub type CaptureModeMap = NodeMap<CaptureBy>;
26102610
// has length > 0 if the trait is found through an chain of imports, starting with the
26112611
// import/use statement in the scope where the trait is used.
26122612
#[derive(Clone, Debug)]
2613-
pub struct TraitCandidate<ID = HirId> {
2613+
pub struct TraitCandidate {
26142614
pub def_id: DefId,
2615-
pub import_ids: SmallVec<[ID; 1]>,
2616-
}
2617-
2618-
impl<ID> TraitCandidate<ID> {
2619-
pub fn map_import_ids<F, T>(self, f: F) -> TraitCandidate<T>
2620-
where
2621-
F: Fn(ID) -> T,
2622-
{
2623-
let TraitCandidate { def_id, import_ids } = self;
2624-
let import_ids = import_ids.into_iter().map(f).collect();
2625-
TraitCandidate { def_id, import_ids }
2626-
}
2615+
pub import_ids: SmallVec<[HirId; 1]>,
26272616
}
26282617

26292618
// Trait method resolution
2630-
pub type TraitMap<ID = HirId> = NodeMap<Vec<TraitCandidate<ID>>>;
2619+
pub type TraitMap = NodeMap<Vec<TraitCandidate>>;
26312620

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

src/librustc_resolve/late.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ use crate::{path_names_to_string, BindingError, CrateLint, LexicalScopeBinding};
1111
use crate::{Module, ModuleOrUniformRoot, NameBindingKind, ParentScope, PathResult};
1212
use crate::{ResolutionError, Resolver, Segment, UseError};
1313

14+
use rustc::ty::TraitCandidate;
1415
use rustc::{bug, lint, span_bug};
1516
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
1617
use rustc_errors::DiagnosticId;
1718
use rustc_hir::def::Namespace::{self, *};
1819
use rustc_hir::def::{self, CtorKind, DefKind, PartialRes, PerNS};
1920
use rustc_hir::def_id::{DefId, CRATE_DEF_INDEX};
20-
use rustc_hir::TraitCandidate;
2121
use rustc_span::symbol::{kw, sym};
2222
use rustc_span::Span;
2323
use smallvec::{smallvec, SmallVec};
@@ -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<NodeId>> {
2081+
) -> Vec<TraitCandidate> {
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<NodeId>>,
2126+
found_traits: &mut Vec<TraitCandidate>,
21272127
) {
21282128
assert!(ns == TypeNS || ns == ValueNS);
21292129
let mut traits = module.traits.borrow_mut();

src/librustc_resolve/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use rustc::lint;
2222
use rustc::middle::cstore::{CrateStore, MetadataLoaderDyn};
2323
use rustc::span_bug;
2424
use rustc::ty::query::Providers;
25-
use rustc::ty::{self, DefIdTree, ResolverOutputs};
25+
use rustc::ty::{self, DefIdTree, ResolverOutputs, TraitMap};
2626
use rustc_ast_pretty::pprust;
2727
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
2828
use rustc_data_structures::ptr_key::PtrKey;
@@ -32,8 +32,8 @@ use rustc_expand::base::SyntaxExtension;
3232
use rustc_hir::def::Namespace::*;
3333
use rustc_hir::def::{self, CtorOf, DefKind, NonMacroAttrKind, PartialRes};
3434
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, CRATE_DEF_INDEX, LOCAL_CRATE};
35+
use rustc_hir::GlobMap;
3536
use rustc_hir::PrimTy::{self, Bool, Char, Float, Int, Str, Uint};
36-
use rustc_hir::{GlobMap, TraitMap};
3737
use rustc_metadata::creader::{CStore, CrateLoader};
3838
use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer};
3939
use rustc_session::Session;
@@ -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<NodeId>,
868+
trait_map: TraitMap,
869869

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

0 commit comments

Comments
 (0)