@@ -203,6 +203,30 @@ impl<'tcx> TyCtxt<'tcx> {
203
203
}
204
204
} )
205
205
}
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
+ #[ inline]
223
+ pub fn hir_owner_parent ( self , owner_id : OwnerId ) -> HirId {
224
+ if self . dep_graph . is_fully_enabled ( ) {
225
+ self . hir_owner_parent_q ( owner_id)
226
+ } else {
227
+ self . hir_owner_parent_impl ( owner_id)
228
+ }
229
+ }
206
230
}
207
231
208
232
/// Hashes computed by [`TyCtxt::hash_owner_nodes`] if necessary.
@@ -224,20 +248,7 @@ pub fn provide(providers: &mut Providers) {
224
248
} ;
225
249
providers. opt_hir_owner_nodes =
226
250
|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
- } ;
251
+ providers. hir_owner_parent_q = |tcx, owner_id| tcx. hir_owner_parent_impl ( owner_id) ;
241
252
providers. hir_attr_map = |tcx, id| {
242
253
tcx. hir_crate ( ( ) ) . owners [ id. def_id ] . as_owner ( ) . map_or ( AttributeMap :: EMPTY , |o| & o. attrs )
243
254
} ;
0 commit comments