@@ -107,9 +107,8 @@ impl<'hir> Iterator for ParentOwnerIterator<'hir> {
107
107
fn next ( & mut self ) -> Option < Self :: Item > {
108
108
if self . current_id . local_id . index ( ) != 0 {
109
109
self . current_id . local_id = ItemLocalId :: new ( 0 ) ;
110
- if let Some ( node) = self . map . tcx . hir_owner ( self . current_id . owner ) {
111
- return Some ( ( self . current_id . owner , node) ) ;
112
- }
110
+ let node = self . map . tcx . hir_owner_node ( self . current_id . owner ) ;
111
+ return Some ( ( self . current_id . owner , node) ) ;
113
112
}
114
113
if self . current_id == CRATE_HIR_ID {
115
114
return None ;
@@ -125,22 +124,42 @@ impl<'hir> Iterator for ParentOwnerIterator<'hir> {
125
124
self . current_id = HirId :: make_owner ( parent_id. def_id ) ;
126
125
127
126
// If this `HirId` doesn't have an entry, skip it and look for its `parent_id`.
128
- if let Some ( node) = self . map . tcx . hir_owner ( self . current_id . owner ) {
129
- return Some ( ( self . current_id . owner , node) ) ;
130
- }
127
+ let node = self . map . tcx . hir_owner_node ( self . current_id . owner ) ;
128
+ return Some ( ( self . current_id . owner , node) ) ;
131
129
}
132
130
}
133
131
}
134
132
135
133
impl < ' tcx > TyCtxt < ' tcx > {
136
134
#[ inline]
137
- fn hir_owner ( self , owner : OwnerId ) -> Option < OwnerNode < ' tcx > > {
138
- Some ( self . opt_hir_owner_nodes ( owner. def_id ) ?. node ( ) )
135
+ fn expect_hir_owner_nodes ( self , def_id : LocalDefId ) -> & ' tcx OwnerNodes < ' tcx > {
136
+ self . opt_hir_owner_nodes ( def_id)
137
+ . unwrap_or_else ( || span_bug ! ( self . def_span( def_id) , "{def_id:?} is not an owner" ) )
138
+ }
139
+
140
+ #[ inline]
141
+ pub fn hir_owner_nodes ( self , owner_id : OwnerId ) -> & ' tcx OwnerNodes < ' tcx > {
142
+ self . expect_hir_owner_nodes ( owner_id. def_id )
143
+ }
144
+
145
+ #[ inline]
146
+ fn opt_hir_owner_node ( self , def_id : LocalDefId ) -> Option < OwnerNode < ' tcx > > {
147
+ self . opt_hir_owner_nodes ( def_id) . map ( |nodes| nodes. node ( ) )
148
+ }
149
+
150
+ #[ inline]
151
+ fn expect_hir_owner_node ( self , def_id : LocalDefId ) -> OwnerNode < ' tcx > {
152
+ self . expect_hir_owner_nodes ( def_id) . node ( )
153
+ }
154
+
155
+ #[ inline]
156
+ fn hir_owner_node ( self , owner_id : OwnerId ) -> OwnerNode < ' tcx > {
157
+ self . hir_owner_nodes ( owner_id) . node ( )
139
158
}
140
159
141
160
/// Retrieves the `hir::Node` corresponding to `id`, returning `None` if cannot be found.
142
161
pub fn opt_hir_node ( self , id : HirId ) -> Option < Node < ' tcx > > {
143
- let owner = self . opt_hir_owner_nodes ( id. owner ) ? ;
162
+ let owner = self . hir_owner_nodes ( id. owner ) ;
144
163
let node = owner. nodes [ id. local_id ] . as_ref ( ) ?;
145
164
Some ( node. node )
146
165
}
@@ -174,8 +193,8 @@ impl<'hir> Map<'hir> {
174
193
175
194
#[ inline]
176
195
pub fn root_module ( self ) -> & ' hir Mod < ' hir > {
177
- match self . tcx . hir_owner ( CRATE_OWNER_ID ) {
178
- Some ( OwnerNode :: Crate ( item) ) => item,
196
+ match self . tcx . hir_owner_node ( CRATE_OWNER_ID ) {
197
+ OwnerNode :: Crate ( item) => item,
179
198
_ => bug ! ( ) ,
180
199
}
181
200
}
@@ -213,7 +232,7 @@ impl<'hir> Map<'hir> {
213
232
if id. local_id == ItemLocalId :: from_u32 ( 0 ) {
214
233
Some ( self . tcx . hir_owner_parent ( id. owner ) )
215
234
} else {
216
- let owner = self . tcx . opt_hir_owner_nodes ( id. owner ) ? ;
235
+ let owner = self . tcx . hir_owner_nodes ( id. owner ) ;
217
236
let node = owner. nodes [ id. local_id ] . as_ref ( ) ?;
218
237
let hir_id = HirId { owner : id. owner , local_id : node. parent } ;
219
238
// HIR indexing should have checked that.
@@ -241,32 +260,31 @@ impl<'hir> Map<'hir> {
241
260
}
242
261
243
262
pub fn get_generics ( self , id : LocalDefId ) -> Option < & ' hir Generics < ' hir > > {
244
- let node = self . tcx . hir_owner ( OwnerId { def_id : id } ) ?;
245
- node. generics ( )
263
+ self . tcx . opt_hir_owner_node ( id) ?. generics ( )
246
264
}
247
265
248
266
pub fn owner ( self , id : OwnerId ) -> OwnerNode < ' hir > {
249
- self . tcx . hir_owner ( id) . unwrap_or_else ( || bug ! ( "expected owner for {:?}" , id ) )
267
+ self . tcx . hir_owner_node ( id)
250
268
}
251
269
252
270
pub fn item ( self , id : ItemId ) -> & ' hir Item < ' hir > {
253
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_item ( )
271
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_item ( )
254
272
}
255
273
256
274
pub fn trait_item ( self , id : TraitItemId ) -> & ' hir TraitItem < ' hir > {
257
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_trait_item ( )
275
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_trait_item ( )
258
276
}
259
277
260
278
pub fn impl_item ( self , id : ImplItemId ) -> & ' hir ImplItem < ' hir > {
261
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_impl_item ( )
279
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_impl_item ( )
262
280
}
263
281
264
282
pub fn foreign_item ( self , id : ForeignItemId ) -> & ' hir ForeignItem < ' hir > {
265
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_foreign_item ( )
283
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_foreign_item ( )
266
284
}
267
285
268
286
pub fn body ( self , id : BodyId ) -> & ' hir Body < ' hir > {
269
- self . tcx . opt_hir_owner_nodes ( id. hir_id . owner ) . unwrap ( ) . bodies [ & id. hir_id . local_id ]
287
+ self . tcx . hir_owner_nodes ( id. hir_id . owner ) . bodies [ & id. hir_id . local_id ]
270
288
}
271
289
272
290
#[ track_caller]
@@ -436,9 +454,9 @@ impl<'hir> Map<'hir> {
436
454
437
455
pub fn get_module ( self , module : LocalModDefId ) -> ( & ' hir Mod < ' hir > , Span , HirId ) {
438
456
let hir_id = HirId :: make_owner ( module. to_local_def_id ( ) ) ;
439
- match self . tcx . hir_owner ( hir_id. owner ) {
440
- Some ( OwnerNode :: Item ( & Item { span, kind : ItemKind :: Mod ( m) , .. } ) ) => ( m, span, hir_id) ,
441
- Some ( OwnerNode :: Crate ( item) ) => ( item, item. spans . inner_span , hir_id) ,
457
+ match self . tcx . hir_owner_node ( hir_id. owner ) {
458
+ OwnerNode :: Item ( & Item { span, kind : ItemKind :: Mod ( m) , .. } ) => ( m, span, hir_id) ,
459
+ OwnerNode :: Crate ( item) => ( item, item. spans . inner_span , hir_id) ,
442
460
node => panic ! ( "not a module: {node:?}" ) ,
443
461
}
444
462
}
@@ -726,8 +744,8 @@ impl<'hir> Map<'hir> {
726
744
727
745
pub fn get_foreign_abi ( self , hir_id : HirId ) -> Abi {
728
746
let parent = self . get_parent_item ( hir_id) ;
729
- if let Some ( node ) = self . tcx . hir_owner ( parent )
730
- && let OwnerNode :: Item ( Item { kind : ItemKind :: ForeignMod { abi , .. } , .. } ) = node
747
+ if let OwnerNode :: Item ( Item { kind : ItemKind :: ForeignMod { abi , .. } , .. } ) =
748
+ self . tcx . hir_owner_node ( parent )
731
749
{
732
750
return * abi;
733
751
}
@@ -738,37 +756,32 @@ impl<'hir> Map<'hir> {
738
756
}
739
757
740
758
pub fn expect_owner ( self , def_id : LocalDefId ) -> OwnerNode < ' hir > {
741
- self . tcx
742
- . hir_owner ( OwnerId { def_id } )
743
- . unwrap_or_else ( || bug ! ( "expected owner for {:?}" , def_id) )
759
+ self . tcx . expect_hir_owner_node ( def_id)
744
760
}
745
761
746
762
pub fn expect_item ( self , id : LocalDefId ) -> & ' hir Item < ' hir > {
747
- match self . tcx . hir_owner ( OwnerId { def_id : id } ) {
748
- Some ( OwnerNode :: Item ( item) ) => item,
763
+ match self . tcx . expect_hir_owner_node ( id ) {
764
+ OwnerNode :: Item ( item) => item,
749
765
_ => bug ! ( "expected item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
750
766
}
751
767
}
752
768
753
769
pub fn expect_impl_item ( self , id : LocalDefId ) -> & ' hir ImplItem < ' hir > {
754
- match self . tcx . hir_owner ( OwnerId { def_id : id } ) {
755
- Some ( OwnerNode :: ImplItem ( item) ) => item,
770
+ match self . tcx . expect_hir_owner_node ( id ) {
771
+ OwnerNode :: ImplItem ( item) => item,
756
772
_ => bug ! ( "expected impl item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
757
773
}
758
774
}
759
775
760
776
pub fn expect_trait_item ( self , id : LocalDefId ) -> & ' hir TraitItem < ' hir > {
761
- match self . tcx . hir_owner ( OwnerId { def_id : id } ) {
762
- Some ( OwnerNode :: TraitItem ( item) ) => item,
777
+ match self . tcx . expect_hir_owner_node ( id ) {
778
+ OwnerNode :: TraitItem ( item) => item,
763
779
_ => bug ! ( "expected trait item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
764
780
}
765
781
}
766
782
767
783
pub fn get_fn_output ( self , def_id : LocalDefId ) -> Option < & ' hir FnRetTy < ' hir > > {
768
- match self . tcx . hir_owner ( OwnerId { def_id } ) {
769
- Some ( node) => node. fn_decl ( ) . map ( |fn_decl| & fn_decl. output ) ,
770
- _ => None ,
771
- }
784
+ Some ( & self . tcx . opt_hir_owner_node ( def_id) ?. fn_decl ( ) ?. output )
772
785
}
773
786
774
787
pub fn expect_variant ( self , id : HirId ) -> & ' hir Variant < ' hir > {
@@ -779,8 +792,8 @@ impl<'hir> Map<'hir> {
779
792
}
780
793
781
794
pub fn expect_foreign_item ( self , id : OwnerId ) -> & ' hir ForeignItem < ' hir > {
782
- match self . tcx . hir_owner ( id) {
783
- Some ( OwnerNode :: ForeignItem ( item) ) => item,
795
+ match self . tcx . hir_owner_node ( id) {
796
+ OwnerNode :: ForeignItem ( item) => item,
784
797
_ => {
785
798
bug ! (
786
799
"expected foreign item, found {}" ,
0 commit comments