@@ -107,9 +107,8 @@ impl<'hir> Iterator for ParentOwnerIterator<'hir> {
107107 fn next ( & mut self ) -> Option < Self :: Item > {
108108 if self . current_id . local_id . index ( ) != 0 {
109109 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) ) ;
113112 }
114113 if self . current_id == CRATE_HIR_ID {
115114 return None ;
@@ -125,22 +124,42 @@ impl<'hir> Iterator for ParentOwnerIterator<'hir> {
125124 self . current_id = HirId :: make_owner ( parent_id. def_id ) ;
126125
127126 // 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) ) ;
131129 }
132130 }
133131}
134132
135133impl < ' tcx > TyCtxt < ' tcx > {
136134 #[ 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 ( )
139158 }
140159
141160 /// Retrieves the `hir::Node` corresponding to `id`, returning `None` if cannot be found.
142161 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 ) ;
144163 let node = owner. nodes [ id. local_id ] . as_ref ( ) ?;
145164 Some ( node. node )
146165 }
@@ -174,8 +193,8 @@ impl<'hir> Map<'hir> {
174193
175194 #[ inline]
176195 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,
179198 _ => bug ! ( ) ,
180199 }
181200 }
@@ -213,7 +232,7 @@ impl<'hir> Map<'hir> {
213232 if id. local_id == ItemLocalId :: from_u32 ( 0 ) {
214233 Some ( self . tcx . hir_owner_parent ( id. owner ) )
215234 } else {
216- let owner = self . tcx . hir_owner_nodes ( id. owner ) . as_owner ( ) ? ;
235+ let owner = self . tcx . hir_owner_nodes ( id. owner ) ;
217236 let node = owner. nodes [ id. local_id ] . as_ref ( ) ?;
218237 let hir_id = HirId { owner : id. owner , local_id : node. parent } ;
219238 // HIR indexing should have checked that.
@@ -241,32 +260,27 @@ impl<'hir> Map<'hir> {
241260 }
242261
243262 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 ( )
250264 }
251265
252266 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 ( )
254268 }
255269
256270 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 ( )
258272 }
259273
260274 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 ( )
262276 }
263277
264278 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 ( )
266280 }
267281
268282 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 ]
270284 }
271285
272286 #[ track_caller]
@@ -436,9 +450,9 @@ impl<'hir> Map<'hir> {
436450
437451 pub fn get_module ( self , module : LocalModDefId ) -> ( & ' hir Mod < ' hir > , Span , HirId ) {
438452 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) ,
442456 node => panic ! ( "not a module: {node:?}" ) ,
443457 }
444458 }
@@ -726,8 +740,8 @@ impl<'hir> Map<'hir> {
726740
727741 pub fn get_foreign_abi ( self , hir_id : HirId ) -> Abi {
728742 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 )
731745 {
732746 return * abi;
733747 }
@@ -737,38 +751,29 @@ impl<'hir> Map<'hir> {
737751 )
738752 }
739753
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-
746754 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,
749757 _ => bug ! ( "expected item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
750758 }
751759 }
752760
753761 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,
756764 _ => bug ! ( "expected impl item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
757765 }
758766 }
759767
760768 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,
763771 _ => bug ! ( "expected trait item, found {}" , self . node_to_string( HirId :: make_owner( id) ) ) ,
764772 }
765773 }
766774
767775 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 )
772777 }
773778
774779 pub fn expect_variant ( self , id : HirId ) -> & ' hir Variant < ' hir > {
@@ -779,8 +784,8 @@ impl<'hir> Map<'hir> {
779784 }
780785
781786 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,
784789 _ => {
785790 bug ! (
786791 "expected foreign item, found {}" ,
0 commit comments