@@ -203,6 +203,32 @@ impl<'tcx> TyCtxt<'tcx> {
203203 }
204204 } )
205205 }
206+
207+ #[ inline]
208+ fn hir_owner_parent_impl ( self , owner_id : OwnerId ) -> HirId {
209+ self . opt_local_parent ( owner_id. def_id ) . map_or ( CRATE_HIR_ID , |parent_def_id| {
210+ let parent_owner_id = self . local_def_id_to_hir_id ( parent_def_id) . owner ;
211+ HirId {
212+ owner : parent_owner_id,
213+ local_id : self . hir_crate ( ( ) ) . owners [ parent_owner_id. def_id ]
214+ . unwrap ( )
215+ . parenting
216+ . get ( & owner_id. def_id )
217+ . copied ( )
218+ . unwrap_or ( ItemLocalId :: ZERO ) ,
219+ }
220+ } )
221+ }
222+ /// Optimization of hir_owner_parent query as an inlined function
223+ /// in case of non-incremental build. Query itself renamed to hir_owner_parent_q.
224+ #[ inline]
225+ pub fn hir_owner_parent ( self , owner_id : OwnerId ) -> HirId {
226+ if self . dep_graph . is_fully_enabled ( ) {
227+ self . hir_owner_parent_q ( owner_id)
228+ } else {
229+ self . hir_owner_parent_impl ( owner_id)
230+ }
231+ }
206232}
207233
208234/// Hashes computed by [`TyCtxt::hash_owner_nodes`] if necessary.
@@ -224,20 +250,7 @@ pub fn provide(providers: &mut Providers) {
224250 } ;
225251 providers. opt_hir_owner_nodes =
226252 |tcx, id| tcx. hir_crate ( ( ) ) . owners . get ( id) ?. as_owner ( ) . map ( |i| & i. nodes ) ;
227- providers. hir_owner_parent = |tcx, owner_id| {
228- tcx. opt_local_parent ( owner_id. def_id ) . map_or ( CRATE_HIR_ID , |parent_def_id| {
229- let parent_owner_id = tcx. local_def_id_to_hir_id ( parent_def_id) . owner ;
230- HirId {
231- owner : parent_owner_id,
232- local_id : tcx. hir_crate ( ( ) ) . owners [ parent_owner_id. def_id ]
233- . unwrap ( )
234- . parenting
235- . get ( & owner_id. def_id )
236- . copied ( )
237- . unwrap_or ( ItemLocalId :: ZERO ) ,
238- }
239- } )
240- } ;
253+ providers. hir_owner_parent_q = |tcx, owner_id| tcx. hir_owner_parent_impl ( owner_id) ;
241254 providers. hir_attr_map = |tcx, id| {
242255 tcx. hir_crate ( ( ) ) . owners [ id. def_id ] . as_owner ( ) . map_or ( AttributeMap :: EMPTY , |o| & o. attrs )
243256 } ;
0 commit comments