@@ -56,22 +56,23 @@ where
5656 ///
5757 /// This expects `goal` and `opaque_types` to be eager resolved.
5858 pub ( super ) fn canonicalize_goal (
59- & self ,
59+ delegate : & D ,
6060 goal : Goal < I , I :: Predicate > ,
6161 opaque_types : Vec < ( ty:: OpaqueTypeKey < I > , I :: Ty ) > ,
6262 ) -> ( Vec < I :: GenericArg > , CanonicalInput < I , I :: Predicate > ) {
6363 let mut orig_values = Default :: default ( ) ;
6464 let canonical = Canonicalizer :: canonicalize_input (
65- self . delegate ,
65+ delegate,
6666 & mut orig_values,
6767 QueryInput {
6868 goal,
69- predefined_opaques_in_body : self
69+ predefined_opaques_in_body : delegate
7070 . cx ( )
7171 . mk_predefined_opaques_in_body ( PredefinedOpaquesData { opaque_types } ) ,
7272 } ,
7373 ) ;
74- let query_input = ty:: CanonicalQueryInput { canonical, typing_mode : self . typing_mode ( ) } ;
74+ let query_input =
75+ ty:: CanonicalQueryInput { canonical, typing_mode : delegate. typing_mode ( ) } ;
7576 ( orig_values, query_input)
7677 }
7778
@@ -271,27 +272,28 @@ where
271272 /// - we apply the `external_constraints` returned by the query, returning
272273 /// the `normalization_nested_goals`
273274 pub ( super ) fn instantiate_and_apply_query_response (
274- & mut self ,
275+ delegate : & D ,
275276 param_env : I :: ParamEnv ,
276277 original_values : & [ I :: GenericArg ] ,
277278 response : CanonicalResponse < I > ,
279+ origin_span : I :: Span ,
278280 ) -> ( NestedNormalizationGoals < I > , Certainty ) {
279281 let instantiation = Self :: compute_query_response_instantiation_values (
280- self . delegate ,
282+ delegate,
281283 & original_values,
282284 & response,
283- self . origin_span ,
285+ origin_span,
284286 ) ;
285287
286288 let Response { var_values, external_constraints, certainty } =
287- self . delegate . instantiate_canonical ( response, instantiation) ;
289+ delegate. instantiate_canonical ( response, instantiation) ;
288290
289291 Self :: unify_query_var_values (
290- self . delegate ,
292+ delegate,
291293 param_env,
292294 & original_values,
293295 var_values,
294- self . origin_span ,
296+ origin_span,
295297 ) ;
296298
297299 let ExternalConstraintsData {
@@ -300,8 +302,8 @@ where
300302 normalization_nested_goals,
301303 } = & * external_constraints;
302304
303- self . register_region_constraints ( region_constraints) ;
304- self . register_new_opaque_types ( opaque_types) ;
305+ Self :: register_region_constraints ( delegate , region_constraints, origin_span ) ;
306+ Self :: register_new_opaque_types ( delegate , opaque_types, origin_span ) ;
305307
306308 ( normalization_nested_goals. clone ( ) , certainty)
307309 }
@@ -424,21 +426,26 @@ where
424426 }
425427
426428 fn register_region_constraints (
427- & mut self ,
429+ delegate : & D ,
428430 outlives : & [ ty:: OutlivesPredicate < I , I :: GenericArg > ] ,
431+ span : I :: Span ,
429432 ) {
430433 for & ty:: OutlivesPredicate ( lhs, rhs) in outlives {
431434 match lhs. kind ( ) {
432- ty:: GenericArgKind :: Lifetime ( lhs) => self . register_region_outlives ( lhs, rhs ) ,
433- ty:: GenericArgKind :: Type ( lhs) => self . register_ty_outlives ( lhs, rhs) ,
435+ ty:: GenericArgKind :: Lifetime ( lhs) => delegate . sub_regions ( rhs , lhs, span ) ,
436+ ty:: GenericArgKind :: Type ( lhs) => delegate . register_ty_outlives ( lhs, rhs, span ) ,
434437 ty:: GenericArgKind :: Const ( _) => panic ! ( "const outlives: {lhs:?}: {rhs:?}" ) ,
435438 }
436439 }
437440 }
438441
439- fn register_new_opaque_types ( & mut self , opaque_types : & [ ( ty:: OpaqueTypeKey < I > , I :: Ty ) ] ) {
442+ fn register_new_opaque_types (
443+ delegate : & D ,
444+ opaque_types : & [ ( ty:: OpaqueTypeKey < I > , I :: Ty ) ] ,
445+ span : I :: Span ,
446+ ) {
440447 for & ( key, ty) in opaque_types {
441- let prev = self . delegate . register_hidden_type_in_storage ( key, ty, self . origin_span ) ;
448+ let prev = delegate. register_hidden_type_in_storage ( key, ty, span ) ;
442449 // We eagerly resolve inference variables when computing the query response.
443450 // This can cause previously distinct opaque type keys to now be structurally equal.
444451 //
@@ -447,7 +454,7 @@ where
447454 // types here. However, doing so is difficult as it may result in nested goals and
448455 // any errors may make it harder to track the control flow for diagnostics.
449456 if let Some ( prev) = prev {
450- self . delegate . add_duplicate_opaque_type ( key, prev, self . origin_span ) ;
457+ delegate. add_duplicate_opaque_type ( key, prev, span ) ;
451458 }
452459 }
453460 }
0 commit comments