File tree 2 files changed +16
-6
lines changed
compiler/rustc_metadata/src
2 files changed +16
-6
lines changed Original file line number Diff line number Diff line change
1
+ use rustc_data_structures:: fx:: FxHashMap ;
1
2
use rustc_hir as hir;
2
3
use rustc_hir:: def:: DefKind ;
4
+ use rustc_hir:: def_id:: DefId ;
5
+ use rustc_middle:: query:: LocalCrate ;
3
6
use rustc_middle:: ty:: TyCtxt ;
4
7
use rustc_session:: cstore:: ForeignModule ;
5
8
6
- pub ( crate ) fn collect ( tcx : TyCtxt < ' _ > ) -> Vec < ForeignModule > {
7
- let mut modules = Vec :: new ( ) ;
9
+ pub ( crate ) fn collect (
10
+ tcx : TyCtxt < ' _ > ,
11
+ LocalCrate : LocalCrate ,
12
+ ) -> FxHashMap < DefId , ForeignModule > {
13
+ let mut modules = FxHashMap :: default ( ) ;
14
+
15
+ // We need to collect all the `ForeignMod`, even if they are empty.
8
16
for id in tcx. hir ( ) . items ( ) {
9
17
if !matches ! ( tcx. def_kind( id. owner_id) , DefKind :: ForeignMod ) {
10
18
continue ;
11
19
}
20
+
21
+ let def_id = id. owner_id . to_def_id ( ) ;
12
22
let item = tcx. hir ( ) . item ( id) ;
23
+
13
24
if let hir:: ItemKind :: ForeignMod { items, .. } = item. kind {
14
25
let foreign_items = items. iter ( ) . map ( |it| it. id . owner_id . to_def_id ( ) ) . collect ( ) ;
15
- modules. push ( ForeignModule { foreign_items, def_id : id . owner_id . to_def_id ( ) } ) ;
26
+ modules. insert ( def_id , ForeignModule { foreign_items, def_id } ) ;
16
27
}
17
28
}
29
+
18
30
modules
19
31
}
Original file line number Diff line number Diff line change @@ -404,9 +404,7 @@ pub(in crate::rmeta) fn provide(providers: &mut Providers) {
404
404
} )
405
405
} ,
406
406
native_libraries : |tcx, LocalCrate | native_libs:: collect ( tcx) ,
407
- foreign_modules : |tcx, LocalCrate | {
408
- foreign_modules:: collect ( tcx) . into_iter ( ) . map ( |m| ( m. def_id , m) ) . collect ( )
409
- } ,
407
+ foreign_modules : foreign_modules:: collect,
410
408
411
409
// Returns a map from a sufficiently visible external item (i.e., an
412
410
// external item that is visible from at least one local module) to a
You can’t perform that action at this time.
0 commit comments