@@ -54,7 +54,7 @@ use rustc_hir::def_id::{DefId, DefIdMap, LocalDefId, CRATE_DEF_INDEX};
5454use rustc_hir:: definitions:: { DefKey , DefPathData , Definitions } ;
5555use rustc_hir:: intravisit;
5656use rustc_hir:: { ConstArg , GenericArg , ParamName } ;
57- use rustc_index:: vec:: IndexVec ;
57+ use rustc_index:: vec:: { Idx , IndexVec } ;
5858use rustc_session:: config:: nightly_options;
5959use rustc_session:: lint:: { builtin:: BARE_TRAIT_OBJECTS , BuiltinLintDiagnostics , LintBuffer } ;
6060use rustc_session:: parse:: ParseSess ;
@@ -205,6 +205,19 @@ pub trait Resolver {
205205 fn next_node_id ( & mut self ) -> NodeId ;
206206
207207 fn trait_map ( & self ) -> & NodeMap < Vec < hir:: TraitCandidate > > ;
208+
209+ fn opt_local_def_id ( & self , node : NodeId ) -> Option < LocalDefId > ;
210+
211+ fn local_def_id ( & self , node : NodeId ) -> LocalDefId ;
212+
213+ fn create_def (
214+ & mut self ,
215+ parent : LocalDefId ,
216+ node_id : ast:: NodeId ,
217+ data : DefPathData ,
218+ expn_id : ExpnId ,
219+ span : Span ,
220+ ) -> LocalDefId ;
208221}
209222
210223type NtToTokenstream = fn ( & Nonterminal , & ParseSess , Span ) -> TokenStream ;
@@ -436,7 +449,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
436449 match tree. kind {
437450 UseTreeKind :: Simple ( _, id1, id2) => {
438451 for & id in & [ id1, id2] {
439- self . lctx . resolver . definitions ( ) . create_def_with_parent (
452+ self . lctx . resolver . create_def (
440453 owner,
441454 id,
442455 DefPathData :: Misc ,
@@ -488,7 +501,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
488501 | ItemKind :: Enum ( _, ref generics)
489502 | ItemKind :: TyAlias ( _, ref generics, ..)
490503 | ItemKind :: Trait ( _, _, ref generics, ..) => {
491- let def_id = self . lctx . resolver . definitions ( ) . local_def_id ( item. id ) ;
504+ let def_id = self . lctx . resolver . local_def_id ( item. id ) ;
492505 let count = generics
493506 . params
494507 . iter ( )
@@ -564,7 +577,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
564577 . map ( |( & k, v) | ( self . node_id_to_hir_id [ k] . unwrap ( ) , v. clone ( ) ) )
565578 . collect ( ) ;
566579
567- self . resolver . definitions ( ) . init_node_id_to_hir_id_mapping ( self . node_id_to_hir_id ) ;
580+ let mut def_id_to_hir_id = IndexVec :: default ( ) ;
581+
582+ for ( node_id, hir_id) in self . node_id_to_hir_id . into_iter_enumerated ( ) {
583+ if let Some ( def_id) = self . resolver . opt_local_def_id ( node_id) {
584+ if def_id_to_hir_id. len ( ) <= def_id. index ( ) {
585+ def_id_to_hir_id. resize ( def_id. index ( ) + 1 , None ) ;
586+ }
587+ def_id_to_hir_id[ def_id] = hir_id;
588+ }
589+ }
590+
591+ self . resolver . definitions ( ) . init_def_id_to_hir_id_mapping ( def_id_to_hir_id) ;
568592
569593 hir:: Crate {
570594 item : hir:: CrateItem { module, attrs, span : c. span } ,
@@ -628,7 +652,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
628652 . item_local_id_counters
629653 . insert ( owner, HIR_ID_COUNTER_LOCKED )
630654 . unwrap_or_else ( || panic ! ( "no `item_local_id_counters` entry for {:?}" , owner) ) ;
631- let def_id = self . resolver . definitions ( ) . local_def_id ( owner) ;
655+ let def_id = self . resolver . local_def_id ( owner) ;
632656 self . current_hir_id_owner . push ( ( def_id, counter) ) ;
633657 let ret = f ( self ) ;
634658 let ( new_def_id, new_counter) = self . current_hir_id_owner . pop ( ) . unwrap ( ) ;
@@ -671,8 +695,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
671695 debug_assert ! ( local_id != HIR_ID_COUNTER_LOCKED ) ;
672696
673697 * local_id_counter += 1 ;
674- let owner = this. resolver . definitions ( ) . opt_local_def_id ( owner) . expect (
675- "you forgot to call `create_def_with_parent ` or are lowering node-IDs \
698+ let owner = this. resolver . opt_local_def_id ( owner) . expect (
699+ "you forgot to call `create_def ` or are lowering node-IDs \
676700 that do not belong to the current owner",
677701 ) ;
678702
@@ -800,7 +824,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
800824 } ;
801825
802826 // Add a definition for the in-band lifetime def.
803- self . resolver . definitions ( ) . create_def_with_parent (
827+ self . resolver . create_def (
804828 parent_def_id,
805829 node_id,
806830 DefPathData :: LifetimeNs ( str_name) ,
@@ -1088,7 +1112,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
10881112
10891113 let impl_trait_node_id = self . resolver . next_node_id ( ) ;
10901114 let parent_def_id = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
1091- self . resolver . definitions ( ) . create_def_with_parent (
1115+ self . resolver . create_def (
10921116 parent_def_id,
10931117 impl_trait_node_id,
10941118 DefPathData :: ImplTrait ,
@@ -1154,7 +1178,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
11541178 let node_id = self . resolver . next_node_id ( ) ;
11551179
11561180 // Add a definition for the in-band const def.
1157- self . resolver . definitions ( ) . create_def_with_parent (
1181+ self . resolver . create_def (
11581182 parent_def_id,
11591183 node_id,
11601184 DefPathData :: AnonConst ,
@@ -1339,7 +1363,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13391363 }
13401364 ImplTraitContext :: Universal ( in_band_ty_params) => {
13411365 // Add a definition for the in-band `Param`.
1342- let def_id = self . resolver . definitions ( ) . local_def_id ( def_node_id) ;
1366+ let def_id = self . resolver . local_def_id ( def_node_id) ;
13431367
13441368 let hir_bounds = self . lower_param_bounds (
13451369 bounds,
@@ -1428,7 +1452,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14281452 // frequently opened issues show.
14291453 let opaque_ty_span = self . mark_span_with_reason ( DesugaringKind :: OpaqueTy , span, None ) ;
14301454
1431- let opaque_ty_def_id = self . resolver . definitions ( ) . local_def_id ( opaque_ty_node_id) ;
1455+ let opaque_ty_def_id = self . resolver . local_def_id ( opaque_ty_node_id) ;
14321456
14331457 self . allocate_hir_id_counter ( opaque_ty_node_id) ;
14341458
@@ -1620,7 +1644,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
16201644 let def_node_id = self . context . resolver . next_node_id ( ) ;
16211645 let hir_id =
16221646 self . context . lower_node_id_with_owner ( def_node_id, self . opaque_ty_id ) ;
1623- self . context . resolver . definitions ( ) . create_def_with_parent (
1647+ self . context . resolver . create_def (
16241648 self . parent ,
16251649 def_node_id,
16261650 DefPathData :: LifetimeNs ( name. ident ( ) . name ) ,
@@ -1870,7 +1894,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18701894
18711895 let opaque_ty_span = self . mark_span_with_reason ( DesugaringKind :: Async , span, None ) ;
18721896
1873- let opaque_ty_def_id = self . resolver . definitions ( ) . local_def_id ( opaque_ty_node_id) ;
1897+ let opaque_ty_def_id = self . resolver . local_def_id ( opaque_ty_node_id) ;
18741898
18751899 self . allocate_hir_id_counter ( opaque_ty_node_id) ;
18761900
0 commit comments