@@ -59,7 +59,6 @@ use rustc_hir::{
5959 TraitCandidate ,
6060} ;
6161use rustc_index:: { Idx , IndexSlice , IndexVec } ;
62- use rustc_macros:: extension;
6362use rustc_middle:: span_bug;
6463use rustc_middle:: ty:: { ResolverAstLowering , TyCtxt } ;
6564use rustc_session:: parse:: { add_feature_diagnostics, feature_err} ;
@@ -93,7 +92,7 @@ rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
9392
9493struct LoweringContext < ' a , ' hir > {
9594 tcx : TyCtxt < ' hir > ,
96- resolver : & ' a mut ResolverAstLowering ,
95+ resolver : PerOwnerResolver < ' a > ,
9796
9897 /// Used to allocate HIR nodes.
9998 arena : & ' hir hir:: Arena < ' hir > ,
@@ -153,7 +152,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
153152 Self {
154153 // Pseudo-globals.
155154 tcx,
156- resolver,
155+ resolver : PerOwnerResolver { general : resolver } ,
157156 arena : tcx. hir_arena ,
158157
159158 // HirId handling.
@@ -201,8 +200,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
201200 }
202201}
203202
204- #[ extension( trait ResolverAstLoweringExt ) ]
205- impl ResolverAstLowering {
203+ pub ( crate ) struct PerOwnerResolver < ' a > {
204+ pub general : & ' a mut ResolverAstLowering ,
205+ }
206+
207+ impl PerOwnerResolver < ' _ > {
206208 fn legacy_const_generic_args ( & self , expr : & Expr ) -> Option < Vec < usize > > {
207209 if let ExprKind :: Path ( None , path) = & expr. kind {
208210 // Don't perform legacy const generics rewriting if the path already
@@ -211,15 +213,17 @@ impl ResolverAstLowering {
211213 return None ;
212214 }
213215
214- if let Res :: Def ( DefKind :: Fn , def_id) = self . partial_res_map . get ( & expr. id ) ?. full_res ( ) ? {
216+ if let Res :: Def ( DefKind :: Fn , def_id) =
217+ self . general . partial_res_map . get ( & expr. id ) ?. full_res ( ) ?
218+ {
215219 // We only support cross-crate argument rewriting. Uses
216220 // within the same crate should be updated to use the new
217221 // const generics style.
218222 if def_id. is_local ( ) {
219223 return None ;
220224 }
221225
222- if let Some ( v) = self . legacy_const_generic_args . get ( & def_id) {
226+ if let Some ( v) = self . general . legacy_const_generic_args . get ( & def_id) {
223227 return v. clone ( ) ;
224228 }
225229 }
@@ -229,22 +233,22 @@ impl ResolverAstLowering {
229233 }
230234
231235 fn get_partial_res ( & self , id : NodeId ) -> Option < PartialRes > {
232- self . partial_res_map . get ( & id) . copied ( )
236+ self . general . partial_res_map . get ( & id) . copied ( )
233237 }
234238
235239 /// Obtains per-namespace resolutions for `use` statement with the given `NodeId`.
236240 fn get_import_res ( & self , id : NodeId ) -> PerNS < Option < Res < NodeId > > > {
237- self . import_res_map . get ( & id) . copied ( ) . unwrap_or_default ( )
241+ self . general . import_res_map . get ( & id) . copied ( ) . unwrap_or_default ( )
238242 }
239243
240244 /// Obtains resolution for a label with the given `NodeId`.
241245 fn get_label_res ( & self , id : NodeId ) -> Option < NodeId > {
242- self . label_res_map . get ( & id) . copied ( )
246+ self . general . label_res_map . get ( & id) . copied ( )
243247 }
244248
245249 /// Obtains resolution for a lifetime with the given `NodeId`.
246250 fn get_lifetime_res ( & self , id : NodeId ) -> Option < LifetimeRes > {
247- self . lifetimes_res_map . get ( & id) . copied ( )
251+ self . general . lifetimes_res_map . get ( & id) . copied ( )
248252 }
249253
250254 /// Obtain the list of lifetimes parameters to add to an item.
@@ -255,7 +259,7 @@ impl ResolverAstLowering {
255259 /// The extra lifetimes that appear from the parenthesized `Fn`-trait desugaring
256260 /// should appear at the enclosing `PolyTraitRef`.
257261 fn extra_lifetime_params ( & self , id : NodeId ) -> Vec < ( Ident , NodeId , LifetimeRes ) > {
258- self . extra_lifetime_params_map . get ( & id) . cloned ( ) . unwrap_or_default ( )
262+ self . general . extra_lifetime_params_map . get ( & id) . cloned ( ) . unwrap_or_default ( )
259263 }
260264}
261265
@@ -514,22 +518,22 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
514518 self . tcx . at ( span) . create_def ( self . current_hir_id_owner . def_id , name, def_kind) . def_id ( ) ;
515519
516520 debug ! ( "create_def: def_id_to_node_id[{:?}] <-> {:?}" , def_id, node_id) ;
517- self . resolver . node_id_to_def_id . insert ( node_id, def_id) ;
521+ self . resolver . general . node_id_to_def_id . insert ( node_id, def_id) ;
518522
519523 def_id
520524 }
521525
522526 fn next_node_id ( & mut self ) -> NodeId {
523- let start = self . resolver . next_node_id ;
527+ let start = self . resolver . general . next_node_id ;
524528 let next = start. as_u32 ( ) . checked_add ( 1 ) . expect ( "input too large; ran out of NodeIds" ) ;
525- self . resolver . next_node_id = ast:: NodeId :: from_u32 ( next) ;
529+ self . resolver . general . next_node_id = ast:: NodeId :: from_u32 ( next) ;
526530 start
527531 }
528532
529533 /// Given the id of some node in the AST, finds the `LocalDefId` associated with it by the name
530534 /// resolver (if any).
531535 fn opt_local_def_id ( & self , node : NodeId ) -> Option < LocalDefId > {
532- self . resolver . node_id_to_def_id . get ( & node) . copied ( )
536+ self . resolver . general . node_id_to_def_id . get ( & node) . copied ( )
533537 }
534538
535539 fn local_def_id ( & self , node : NodeId ) -> LocalDefId {
@@ -653,7 +657,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
653657 self . children . push ( ( def_id, hir:: MaybeOwner :: NonOwner ( hir_id) ) ) ;
654658 }
655659
656- if let Some ( traits) = self . resolver . trait_map . remove ( & ast_node_id) {
660+ if let Some ( traits) = self . resolver . general . trait_map . remove ( & ast_node_id) {
657661 self . trait_map . insert ( hir_id. local_id , traits. into_boxed_slice ( ) ) ;
658662 }
659663
@@ -1600,7 +1604,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
16001604 inputs,
16011605 output,
16021606 c_variadic,
1603- lifetime_elision_allowed : self . resolver . lifetime_elision_allowed . contains ( & fn_node_id) ,
1607+ lifetime_elision_allowed : self
1608+ . resolver
1609+ . general
1610+ . lifetime_elision_allowed
1611+ . contains ( & fn_node_id) ,
16041612 implicit_self : decl. inputs . get ( 0 ) . map_or ( hir:: ImplicitSelfKind :: None , |arg| {
16051613 let is_mutable_pat = matches ! (
16061614 arg. pat. kind,
0 commit comments