@@ -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 . hir_owner_nodes ( owner) . as_owner ( ) ?. 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
+ pub 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
+ pub 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 . hir_owner_nodes ( id. owner ) . as_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 . hir_owner_nodes ( id. owner ) . as_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,27 @@ 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 ( )
246
- }
247
-
248
- pub fn owner ( self , id : OwnerId ) -> OwnerNode < ' hir > {
249
- self . tcx . hir_owner ( id) . unwrap_or_else ( || bug ! ( "expected owner for {:?}" , id) )
263
+ self . tcx . opt_hir_owner_node ( id) ?. generics ( )
250
264
}
251
265
252
266
pub fn item ( self , id : ItemId ) -> & ' hir Item < ' hir > {
253
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_item ( )
267
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_item ( )
254
268
}
255
269
256
270
pub fn trait_item ( self , id : TraitItemId ) -> & ' hir TraitItem < ' hir > {
257
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_trait_item ( )
271
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_trait_item ( )
258
272
}
259
273
260
274
pub fn impl_item ( self , id : ImplItemId ) -> & ' hir ImplItem < ' hir > {
261
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_impl_item ( )
275
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_impl_item ( )
262
276
}
263
277
264
278
pub fn foreign_item ( self , id : ForeignItemId ) -> & ' hir ForeignItem < ' hir > {
265
- self . tcx . hir_owner ( id. owner_id ) . unwrap ( ) . expect_foreign_item ( )
279
+ self . tcx . hir_owner_node ( id. owner_id ) . expect_foreign_item ( )
266
280
}
267
281
268
282
pub fn body ( self , id : BodyId ) -> & ' hir Body < ' hir > {
269
- self . tcx . hir_owner_nodes ( id. hir_id . owner ) . unwrap ( ) . bodies [ & id. hir_id . local_id ]
283
+ self . tcx . hir_owner_nodes ( id. hir_id . owner ) . bodies [ & id. hir_id . local_id ]
270
284
}
271
285
272
286
#[ track_caller]
@@ -436,9 +450,9 @@ impl<'hir> Map<'hir> {
436
450
437
451
pub fn get_module ( self , module : LocalModDefId ) -> ( & ' hir Mod < ' hir > , Span , HirId ) {
438
452
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) ,
453
+ match self . tcx . hir_owner_node ( hir_id. owner ) {
454
+ OwnerNode :: Item ( & Item { span, kind : ItemKind :: Mod ( m) , .. } ) => ( m, span, hir_id) ,
455
+ OwnerNode :: Crate ( item) => ( item, item. spans . inner_span , hir_id) ,
442
456
node => panic ! ( "not a module: {node:?}" ) ,
443
457
}
444
458
}
@@ -726,8 +740,8 @@ impl<'hir> Map<'hir> {
726
740
727
741
pub fn get_foreign_abi ( self , hir_id : HirId ) -> Abi {
728
742
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
743
+ if let OwnerNode :: Item ( Item { kind : ItemKind :: ForeignMod { abi , .. } , .. } ) =
744
+ self . tcx . hir_owner_node ( parent )
731
745
{
732
746
return * abi;
733
747
}
@@ -737,38 +751,29 @@ impl<'hir> Map<'hir> {
737
751
)
738
752
}
739
753
740
- 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) )
744
- }
745
-
746
754
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,
755
+ match self . tcx . expect_hir_owner_node ( id ) {
756
+ OwnerNode :: Item ( item) => item,
749
757
_ => bug ! ( "expected item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
750
758
}
751
759
}
752
760
753
761
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,
762
+ match self . tcx . expect_hir_owner_node ( id ) {
763
+ OwnerNode :: ImplItem ( item) => item,
756
764
_ => bug ! ( "expected impl item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
757
765
}
758
766
}
759
767
760
768
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,
769
+ match self . tcx . expect_hir_owner_node ( id ) {
770
+ OwnerNode :: TraitItem ( item) => item,
763
771
_ => bug ! ( "expected trait item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
764
772
}
765
773
}
766
774
767
775
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
- }
776
+ Some ( & self . tcx . opt_hir_owner_node ( def_id) ?. fn_decl ( ) ?. output )
772
777
}
773
778
774
779
pub fn expect_variant ( self , id : HirId ) -> & ' hir Variant < ' hir > {
@@ -779,8 +784,8 @@ impl<'hir> Map<'hir> {
779
784
}
780
785
781
786
pub fn expect_foreign_item ( self , id : OwnerId ) -> & ' hir ForeignItem < ' hir > {
782
- match self . tcx . hir_owner ( id) {
783
- Some ( OwnerNode :: ForeignItem ( item) ) => item,
787
+ match self . tcx . hir_owner_node ( id) {
788
+ OwnerNode :: ForeignItem ( item) => item,
784
789
_ => {
785
790
bug ! (
786
791
"expected foreign item, found {}" ,
0 commit comments