@@ -20,7 +20,7 @@ use rustc_span::source_map::Spanned;
2020use rustc_span:: symbol:: { kw, sym, Ident , Symbol } ;
2121use rustc_span:: Span ;
2222use rustc_target:: spec:: abi:: Abi ;
23- use std:: collections:: BTreeSet ;
23+ use std:: collections:: VecDeque ;
2424
2525pub mod blocks;
2626mod collector;
@@ -543,28 +543,28 @@ impl<'hir> Map<'hir> {
543543 {
544544 let module = self . tcx . hir_module_items ( module) ;
545545
546- for id in & module. items {
546+ for id in module. items . iter ( ) {
547547 visitor. visit_item ( self . item ( * id) ) ;
548548 }
549549
550- for id in & module. trait_items {
550+ for id in module. trait_items . iter ( ) {
551551 visitor. visit_trait_item ( self . trait_item ( * id) ) ;
552552 }
553553
554- for id in & module. impl_items {
554+ for id in module. impl_items . iter ( ) {
555555 visitor. visit_impl_item ( self . impl_item ( * id) ) ;
556556 }
557557
558- for id in & module. foreign_items {
558+ for id in module. foreign_items . iter ( ) {
559559 visitor. visit_foreign_item ( self . foreign_item ( * id) ) ;
560560 }
561561 }
562562
563563 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 ) ;
566566
567- while let Some ( id) = queue. pop_first ( ) {
567+ while let Some ( id) = queue. pop_front ( ) {
568568 f ( id) ;
569569 let items = self . tcx . hir_module_items ( id) ;
570570 queue. extend ( items. submodules . iter ( ) . copied ( ) )
@@ -581,7 +581,7 @@ impl<'hir> Map<'hir> {
581581 {
582582 ( * f) ( module) ;
583583 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) ) ;
585585 }
586586 }
587587
@@ -1149,27 +1149,33 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId) -> String {
11491149pub ( super ) fn hir_module_items ( tcx : TyCtxt < ' _ > , module_id : LocalDefId ) -> ModuleItems {
11501150 let mut collector = ModuleCollector {
11511151 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 ( ) ,
11571157 } ;
11581158
11591159 let ( hir_mod, span, hir_id) = tcx. hir ( ) . get_module ( module_id) ;
11601160 collector. visit_mod ( hir_mod, span, hir_id) ;
11611161
11621162 let ModuleCollector { submodules, items, trait_items, impl_items, foreign_items, .. } =
11631163 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+ } ;
11651171
11661172 struct ModuleCollector < ' tcx > {
11671173 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 > ,
11731179 }
11741180
11751181 impl < ' hir > Visitor < ' hir > for ModuleCollector < ' hir > {
@@ -1180,27 +1186,27 @@ pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> Module
11801186 }
11811187
11821188 fn visit_item ( & mut self , item : & ' hir Item < ' hir > ) {
1183- self . items . insert ( item. item_id ( ) ) ;
1189+ self . items . push ( item. item_id ( ) ) ;
11841190 if let ItemKind :: Mod ( ..) = item. kind {
11851191 // If this declares another module, do not recurse inside it.
1186- self . submodules . insert ( item. def_id ) ;
1192+ self . submodules . push ( item. def_id ) ;
11871193 } else {
11881194 intravisit:: walk_item ( self , item)
11891195 }
11901196 }
11911197
11921198 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 ( ) ) ;
11941200 intravisit:: walk_trait_item ( self , item)
11951201 }
11961202
11971203 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 ( ) ) ;
11991205 intravisit:: walk_impl_item ( self , item)
12001206 }
12011207
12021208 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 ( ) ) ;
12041210 intravisit:: walk_foreign_item ( self , item)
12051211 }
12061212 }
0 commit comments