@@ -20,7 +20,7 @@ use rustc_span::source_map::Spanned;
20
20
use rustc_span:: symbol:: { kw, sym, Ident , Symbol } ;
21
21
use rustc_span:: Span ;
22
22
use rustc_target:: spec:: abi:: Abi ;
23
- use std:: collections:: BTreeSet ;
23
+ use std:: collections:: VecDeque ;
24
24
25
25
pub mod blocks;
26
26
mod collector;
@@ -543,28 +543,28 @@ impl<'hir> Map<'hir> {
543
543
{
544
544
let module = self . tcx . hir_module_items ( module) ;
545
545
546
- for id in & module. items {
546
+ for id in module. items . iter ( ) {
547
547
visitor. visit_item ( self . item ( * id) ) ;
548
548
}
549
549
550
- for id in & module. trait_items {
550
+ for id in module. trait_items . iter ( ) {
551
551
visitor. visit_trait_item ( self . trait_item ( * id) ) ;
552
552
}
553
553
554
- for id in & module. impl_items {
554
+ for id in module. impl_items . iter ( ) {
555
555
visitor. visit_impl_item ( self . impl_item ( * id) ) ;
556
556
}
557
557
558
- for id in & module. foreign_items {
558
+ for id in module. foreign_items . iter ( ) {
559
559
visitor. visit_foreign_item ( self . foreign_item ( * id) ) ;
560
560
}
561
561
}
562
562
563
563
pub fn for_each_module ( & self , f : impl Fn ( LocalDefId ) ) {
564
- let mut queue = BTreeSet :: default ( ) ;
565
- queue. insert ( CRATE_DEF_ID ) ;
564
+ let mut queue = VecDeque :: new ( ) ;
565
+ queue. push_back ( CRATE_DEF_ID ) ;
566
566
567
- while let Some ( id) = queue. pop_first ( ) {
567
+ while let Some ( id) = queue. pop_front ( ) {
568
568
f ( id) ;
569
569
let items = self . tcx . hir_module_items ( id) ;
570
570
queue. extend ( items. submodules . iter ( ) . copied ( ) )
@@ -581,7 +581,7 @@ impl<'hir> Map<'hir> {
581
581
{
582
582
( * f) ( module) ;
583
583
let items = tcx. hir_module_items ( module) ;
584
- par_iter ( & items. submodules ) . for_each ( |& sm| par_iter_submodules ( tcx, sm, f) ) ;
584
+ par_iter ( & items. submodules [ .. ] ) . for_each ( |& sm| par_iter_submodules ( tcx, sm, f) ) ;
585
585
}
586
586
}
587
587
@@ -1149,27 +1149,33 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId) -> String {
1149
1149
pub ( super ) fn hir_module_items ( tcx : TyCtxt < ' _ > , module_id : LocalDefId ) -> ModuleItems {
1150
1150
let mut collector = ModuleCollector {
1151
1151
tcx,
1152
- submodules : BTreeSet :: default ( ) ,
1153
- items : BTreeSet :: default ( ) ,
1154
- trait_items : BTreeSet :: default ( ) ,
1155
- impl_items : BTreeSet :: default ( ) ,
1156
- foreign_items : BTreeSet :: default ( ) ,
1152
+ submodules : Vec :: default ( ) ,
1153
+ items : Vec :: default ( ) ,
1154
+ trait_items : Vec :: default ( ) ,
1155
+ impl_items : Vec :: default ( ) ,
1156
+ foreign_items : Vec :: default ( ) ,
1157
1157
} ;
1158
1158
1159
1159
let ( hir_mod, span, hir_id) = tcx. hir ( ) . get_module ( module_id) ;
1160
1160
collector. visit_mod ( hir_mod, span, hir_id) ;
1161
1161
1162
1162
let ModuleCollector { submodules, items, trait_items, impl_items, foreign_items, .. } =
1163
1163
collector;
1164
- return ModuleItems { submodules, items, trait_items, impl_items, foreign_items } ;
1164
+ return ModuleItems {
1165
+ submodules : submodules. into_boxed_slice ( ) ,
1166
+ items : items. into_boxed_slice ( ) ,
1167
+ trait_items : trait_items. into_boxed_slice ( ) ,
1168
+ impl_items : impl_items. into_boxed_slice ( ) ,
1169
+ foreign_items : foreign_items. into_boxed_slice ( ) ,
1170
+ } ;
1165
1171
1166
1172
struct ModuleCollector < ' tcx > {
1167
1173
tcx : TyCtxt < ' tcx > ,
1168
- submodules : BTreeSet < LocalDefId > ,
1169
- items : BTreeSet < ItemId > ,
1170
- trait_items : BTreeSet < TraitItemId > ,
1171
- impl_items : BTreeSet < ImplItemId > ,
1172
- foreign_items : BTreeSet < ForeignItemId > ,
1174
+ submodules : Vec < LocalDefId > ,
1175
+ items : Vec < ItemId > ,
1176
+ trait_items : Vec < TraitItemId > ,
1177
+ impl_items : Vec < ImplItemId > ,
1178
+ foreign_items : Vec < ForeignItemId > ,
1173
1179
}
1174
1180
1175
1181
impl < ' hir > Visitor < ' hir > for ModuleCollector < ' hir > {
@@ -1180,27 +1186,27 @@ pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> Module
1180
1186
}
1181
1187
1182
1188
fn visit_item ( & mut self , item : & ' hir Item < ' hir > ) {
1183
- self . items . insert ( item. item_id ( ) ) ;
1189
+ self . items . push ( item. item_id ( ) ) ;
1184
1190
if let ItemKind :: Mod ( ..) = item. kind {
1185
1191
// If this declares another module, do not recurse inside it.
1186
- self . submodules . insert ( item. def_id ) ;
1192
+ self . submodules . push ( item. def_id ) ;
1187
1193
} else {
1188
1194
intravisit:: walk_item ( self , item)
1189
1195
}
1190
1196
}
1191
1197
1192
1198
fn visit_trait_item ( & mut self , item : & ' hir TraitItem < ' hir > ) {
1193
- self . trait_items . insert ( item. trait_item_id ( ) ) ;
1199
+ self . trait_items . push ( item. trait_item_id ( ) ) ;
1194
1200
intravisit:: walk_trait_item ( self , item)
1195
1201
}
1196
1202
1197
1203
fn visit_impl_item ( & mut self , item : & ' hir ImplItem < ' hir > ) {
1198
- self . impl_items . insert ( item. impl_item_id ( ) ) ;
1204
+ self . impl_items . push ( item. impl_item_id ( ) ) ;
1199
1205
intravisit:: walk_impl_item ( self , item)
1200
1206
}
1201
1207
1202
1208
fn visit_foreign_item ( & mut self , item : & ' hir ForeignItem < ' hir > ) {
1203
- self . foreign_items . insert ( item. foreign_item_id ( ) ) ;
1209
+ self . foreign_items . push ( item. foreign_item_id ( ) ) ;
1204
1210
intravisit:: walk_foreign_item ( self , item)
1205
1211
}
1206
1212
}
0 commit comments