@@ -51,7 +51,7 @@ use rustc_data_structures::tagged_ptr::TaggedRef;
5151use rustc_errors:: { DiagArgFromDisplay , DiagCtxtHandle } ;
5252use rustc_hir:: def:: { DefKind , LifetimeRes , Namespace , PartialRes , PerNS , Res } ;
5353use rustc_hir:: def_id:: { CRATE_DEF_ID , LOCAL_CRATE , LocalDefId } ;
54- use rustc_hir:: definitions:: { DefPathData , DisambiguatorState } ;
54+ use rustc_hir:: definitions:: PerParentDisambiguatorState ;
5555use rustc_hir:: lints:: { AttributeLint , DelayedLint } ;
5656use rustc_hir:: {
5757 self as hir, AngleBrackets , ConstArg , GenericArg , HirId , ItemLocalMap , LifetimeSource ,
@@ -94,7 +94,7 @@ pub mod stability;
9494struct LoweringContext < ' a , ' hir , R > {
9595 tcx : TyCtxt < ' hir > ,
9696 resolver : & ' a mut R ,
97- disambiguator : DisambiguatorState ,
97+ disambiguator : PerParentDisambiguatorState ,
9898
9999 /// Used to allocate HIR nodes.
100100 arena : & ' hir hir:: Arena < ' hir > ,
@@ -159,7 +159,7 @@ impl<'a, 'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'a, 'hir, R> {
159159 Self {
160160 tcx,
161161 resolver,
162- disambiguator : DisambiguatorState :: new ( ) ,
162+ disambiguator : Default :: default ( ) ,
163163 arena : tcx. hir_arena ,
164164
165165 // HirId handling.
@@ -302,6 +302,10 @@ 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+ }
305309}
306310
307311fn next_node_id ( current_id : & mut NodeId ) -> NodeId {
@@ -404,6 +408,10 @@ impl<'tcx> ResolverAstLowering<'tcx> {
404408 fn next_node_id ( & mut self ) -> NodeId {
405409 next_node_id ( & mut self . next_node_id )
406410 }
411+
412+ fn steal_or_create_disambiguator ( & self , parent : LocalDefId ) -> PerParentDisambiguatorState {
413+ self . per_parent_disambiguators . get ( & parent) . map ( |s| s. steal ( ) ) . unwrap_or_default ( )
414+ }
407415}
408416
409417/// How relaxed bounds `?Trait` should be treated.
@@ -717,7 +725,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
717725 node_id : ast:: NodeId ,
718726 name : Option < Symbol > ,
719727 def_kind : DefKind ,
720- def_path_data : DefPathData ,
721728 span : Span ,
722729 ) -> LocalDefId {
723730 let parent = self . current_hir_id_owner . def_id ;
@@ -733,7 +740,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
733740 let def_id = self
734741 . tcx
735742 . at ( span)
736- . create_def ( parent, name, def_kind, Some ( def_path_data ) , & mut self . disambiguator )
743+ . create_def ( parent, name, def_kind, None , & mut self . disambiguator )
737744 . def_id ( ) ;
738745
739746 debug ! ( "create_def: def_id_to_node_id[{:?}] <-> {:?}" , def_id, node_id) ;
@@ -774,6 +781,8 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
774781 ) {
775782 let owner_id = self . owner_id ( owner) ;
776783
784+ let new_disambig = self . resolver . steal_or_create_disambiguator ( owner_id. def_id ) ;
785+ let disambiguator = std:: mem:: replace ( & mut self . disambiguator , new_disambig) ;
777786 let current_attrs = std:: mem:: take ( & mut self . attrs ) ;
778787 let current_bodies = std:: mem:: take ( & mut self . bodies ) ;
779788 let current_define_opaque = std:: mem:: take ( & mut self . define_opaque ) ;
@@ -808,6 +817,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
808817 assert ! ( self . impl_trait_bounds. is_empty( ) ) ;
809818 let info = self . make_owner_info ( item) ;
810819
820+ self . disambiguator = disambiguator;
811821 self . attrs = current_attrs;
812822 self . bodies = current_bodies;
813823 self . define_opaque = current_define_opaque;
@@ -1015,7 +1025,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
10151025 param,
10161026 Some ( kw:: UnderscoreLifetime ) ,
10171027 DefKind :: LifetimeParam ,
1018- DefPathData :: DesugaredAnonymousLifetime ,
10191028 ident. span ,
10201029 ) ;
10211030 debug ! ( ?_def_id) ;
@@ -2504,13 +2513,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
25042513 // We're lowering a const argument that was originally thought to be a type argument,
25052514 // so the def collector didn't create the def ahead of time. That's why we have to do
25062515 // it here.
2507- let def_id = self . create_def (
2508- node_id,
2509- None ,
2510- DefKind :: AnonConst ,
2511- DefPathData :: LateAnonConst ,
2512- span,
2513- ) ;
2516+ let def_id = self . create_def ( node_id, None , DefKind :: AnonConst , span) ;
25142517 let hir_id = self . lower_node_id ( node_id) ;
25152518
25162519 let path_expr = Expr {
0 commit comments