@@ -94,7 +94,7 @@ pub mod stability;
9494struct LoweringContext < ' a , ' hir , R > {
9595 tcx : TyCtxt < ' hir > ,
9696 resolver : & ' a mut R ,
97- disambiguator : PerParentDisambiguatorState ,
97+ disambiguator : & ' a mut Disambiguator ,
9898
9999 /// Used to allocate HIR nodes.
100100 arena : & ' hir hir:: Arena < ' hir > ,
@@ -154,12 +154,12 @@ struct LoweringContext<'a, 'hir, R> {
154154}
155155
156156impl < ' a , ' hir , R : ResolverAstLoweringExt < ' hir > > LoweringContext < ' a , ' hir , R > {
157- fn new ( tcx : TyCtxt < ' hir > , resolver : & ' a mut R ) -> Self {
157+ fn new ( tcx : TyCtxt < ' hir > , resolver : & ' a mut R , disambiguator : & ' a mut Disambiguator ) -> Self {
158158 let registered_tools = tcx. registered_tools ( ( ) ) . iter ( ) . map ( |x| x. name ) . collect ( ) ;
159159 Self {
160160 tcx,
161161 resolver,
162- disambiguator : Default :: default ( ) ,
162+ disambiguator,
163163 arena : tcx. hir_arena ,
164164
165165 // HirId handling.
@@ -302,10 +302,6 @@ impl<'a, 'tcx> ResolverAstLoweringExt<'tcx> for ResolverDelayedAstLowering<'a, '
302302 fn next_node_id ( & mut self ) -> NodeId {
303303 next_node_id ( & mut self . next_node_id )
304304 }
305-
306- fn steal_or_create_disambiguator ( & self , parent : LocalDefId ) -> PerParentDisambiguatorState {
307- self . base . steal_or_create_disambiguator ( parent)
308- }
309305}
310306
311307fn next_node_id ( current_id : & mut NodeId ) -> NodeId {
@@ -408,15 +404,6 @@ impl<'tcx> ResolverAstLowering<'tcx> {
408404 fn next_node_id ( & mut self ) -> NodeId {
409405 next_node_id ( & mut self . next_node_id )
410406 }
411-
412- fn steal_or_create_disambiguator ( & self , parent : LocalDefId ) -> PerParentDisambiguatorState {
413- self . per_parent_disambiguators . get ( & parent) . map ( |s| s. steal ( ) ) . unwrap_or_else ( || {
414- PerParentDisambiguatorState :: new (
415- #[ cfg( debug_assertions) ]
416- parent,
417- )
418- } )
419- }
420407}
421408
422409/// How relaxed bounds `?Trait` should be treated.
@@ -637,6 +624,7 @@ pub fn lower_to_hir(tcx: TyCtxt<'_>, (): ()) -> mid_hir::Crate<'_> {
637624 tcx. definitions_untracked ( ) . def_index_count ( ) ,
638625 ) ;
639626
627+ let mut disambiguator = Disambiguator :: Full ( resolver. disambiguator . steal ( ) ) ;
640628 let mut lowerer = item:: ItemLowerer {
641629 tcx,
642630 resolver : & mut resolver,
@@ -652,7 +640,7 @@ pub fn lower_to_hir(tcx: TyCtxt<'_>, (): ()) -> mid_hir::Crate<'_> {
652640 | AstOwner :: AssocItem ( Item { kind : AssocItemKind :: Delegation { .. } , .. } , _) => {
653641 delayed_ids. insert ( def_id) ;
654642 }
655- _ => lowerer. lower_node ( def_id) ,
643+ _ => lowerer. lower_node ( def_id, & mut disambiguator ) ,
656644 } ;
657645 }
658646
@@ -683,14 +671,23 @@ pub fn lower_delayed_owner(tcx: TyCtxt<'_>, def_id: LocalDefId) {
683671
684672 let mut map = Default :: default ( ) ;
685673
674+ let per_parent_disambiguators = & resolver. base . per_parent_disambiguators ;
675+ let disambiguator =
676+ per_parent_disambiguators. get ( & def_id) . map ( Steal :: steal) . unwrap_or_else ( || {
677+ PerParentDisambiguatorState :: new (
678+ #[ cfg( debug_assertions) ]
679+ def_id,
680+ )
681+ } ) ;
682+
686683 let mut lowerer = item:: ItemLowerer {
687684 tcx,
688685 resolver : & mut resolver,
689686 ast_index : & ast_index,
690687 owners : Owners :: Map ( & mut map) ,
691688 } ;
692689
693- lowerer. lower_node ( def_id) ;
690+ lowerer. lower_node ( def_id, & mut Disambiguator :: PerParent ( disambiguator ) ) ;
694691
695692 for ( child_def_id, owner) in map {
696693 tcx. feed_delayed_owner ( child_def_id, owner) ;
@@ -745,13 +742,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
745742 let def_id = self
746743 . tcx
747744 . at ( span)
748- . create_def (
749- parent,
750- name,
751- def_kind,
752- None ,
753- Disambiguator :: PerParent ( & mut self . disambiguator ) ,
754- )
745+ . create_def ( parent, name, def_kind, None , & mut self . disambiguator )
755746 . def_id ( ) ;
756747
757748 debug ! ( "create_def: def_id_to_node_id[{:?}] <-> {:?}" , def_id, node_id) ;
@@ -792,8 +783,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
792783 ) {
793784 let owner_id = self . owner_id ( owner) ;
794785
795- let new_disambig = self . resolver . steal_or_create_disambiguator ( owner_id. def_id ) ;
796- let disambiguator = std:: mem:: replace ( & mut self . disambiguator , new_disambig) ;
797786 let current_attrs = std:: mem:: take ( & mut self . attrs ) ;
798787 let current_bodies = std:: mem:: take ( & mut self . bodies ) ;
799788 let current_define_opaque = std:: mem:: take ( & mut self . define_opaque ) ;
@@ -828,7 +817,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
828817 assert ! ( self . impl_trait_bounds. is_empty( ) ) ;
829818 let info = self . make_owner_info ( item) ;
830819
831- self . disambiguator = disambiguator;
832820 self . attrs = current_attrs;
833821 self . bodies = current_bodies;
834822 self . define_opaque = current_define_opaque;
0 commit comments