22//! `.chalk` files containing those definitions.
33use std:: {
44 borrow:: Borrow ,
5- cmp:: { Ord , Ordering } ,
6- collections:: BTreeSet ,
75 fmt:: { self , Debug , Display } ,
86 io:: Write ,
97 marker:: PhantomData ,
@@ -18,6 +16,8 @@ use crate::{
1816} ;
1917use chalk_ir:: { interner:: Interner , * } ;
2018
19+ use indexmap:: IndexSet ;
20+
2121mod id_collector;
2222
2323/// Wraps another `RustIrDatabase` (`DB`) and records which definitions are
3636 I : Interner ,
3737{
3838 ws : WriterState < I , DB , P > ,
39- def_ids : Mutex < BTreeSet < RecordedItemId < I > > > ,
39+ def_ids : Mutex < IndexSet < RecordedItemId < I > > > ,
4040 _phantom : PhantomData < DB > ,
4141}
4242
@@ -535,7 +535,7 @@ where
535535 }
536536}
537537
538- #[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
538+ #[ derive( Copy , Clone , PartialEq , Eq , Debug , Hash ) ]
539539pub enum RecordedItemId < I : Interner > {
540540 Adt ( AdtId < I > ) ,
541541 Trait ( TraitId < I > ) ,
@@ -580,38 +580,3 @@ impl<I: Interner> From<GeneratorId<I>> for RecordedItemId<I> {
580580 RecordedItemId :: Generator ( v)
581581 }
582582}
583-
584- /// Utility for implementing Ord for RecordedItemId.
585- #[ derive( PartialEq , Eq , PartialOrd , Ord ) ]
586- enum OrderedItemId < ' a , DefId , AdtId > {
587- DefId ( & ' a DefId ) ,
588- AdtId ( & ' a AdtId ) ,
589- }
590-
591- impl < I : Interner > RecordedItemId < I > {
592- /// Extract internal identifier. Allows for absolute ordering matching the
593- /// order in which chalk saw things (and thus reproducing that order in
594- /// printed programs)
595- fn ordered_item_id ( & self ) -> OrderedItemId < ' _ , I :: DefId , I :: InternedAdtId > {
596- match self {
597- RecordedItemId :: Trait ( TraitId ( x) )
598- | RecordedItemId :: Impl ( ImplId ( x) )
599- | RecordedItemId :: OpaqueTy ( OpaqueTyId ( x) )
600- | RecordedItemId :: Generator ( GeneratorId ( x) )
601- | RecordedItemId :: FnDef ( FnDefId ( x) ) => OrderedItemId :: DefId ( x) ,
602- RecordedItemId :: Adt ( AdtId ( x) ) => OrderedItemId :: AdtId ( x) ,
603- }
604- }
605- }
606-
607- impl < I : Interner > PartialOrd for RecordedItemId < I > {
608- fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
609- Some ( self . cmp ( other) )
610- }
611- }
612-
613- impl < I : Interner > Ord for RecordedItemId < I > {
614- fn cmp ( & self , other : & Self ) -> Ordering {
615- self . ordered_item_id ( ) . cmp ( & other. ordered_item_id ( ) )
616- }
617- }
0 commit comments