@@ -35,7 +35,7 @@ use rustc_data_structures::sync::{self, par_iter, Lrc, ParallelIterator};
3535use rustc_hir as hir;
3636use rustc_hir:: def:: { CtorKind , CtorOf , DefKind , Res } ;
3737use 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 } ;
3939use rustc_index:: vec:: { Idx , IndexVec } ;
4040use rustc_macros:: HashStable ;
4141use rustc_serialize:: { self , Encodable , Encoder } ;
@@ -46,6 +46,7 @@ use rustc_target::abi::Align;
4646use syntax:: ast:: { self , Ident , Name } ;
4747use syntax:: node_id:: { NodeId , NodeMap , NodeSet } ;
4848
49+ use smallvec:: SmallVec ;
4950use std:: cell:: RefCell ;
5051use std:: cmp:: { self , Ordering } ;
5152use 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+
126144pub 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 > ,
0 commit comments