@@ -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,37 +272,32 @@ 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+ 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+ 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
289- Self :: unify_query_var_values (
290- self . delegate ,
291- param_env,
292- & original_values,
293- var_values,
294- self . origin_span ,
295- ) ;
291+ Self :: unify_query_var_values ( delegate, param_env, & original_values, var_values, span) ;
296292
297293 let ExternalConstraintsData {
298294 region_constraints,
299295 opaque_types,
300296 normalization_nested_goals,
301297 } = & * external_constraints;
302298
303- self . register_region_constraints ( region_constraints) ;
304- self . register_new_opaque_types ( opaque_types) ;
299+ Self :: register_region_constraints ( delegate , region_constraints, span ) ;
300+ Self :: register_new_opaque_types ( delegate , opaque_types, span ) ;
305301
306302 ( normalization_nested_goals. clone ( ) , certainty)
307303 }
@@ -424,21 +420,26 @@ where
424420 }
425421
426422 fn register_region_constraints (
427- & mut self ,
423+ delegate : & D ,
428424 outlives : & [ ty:: OutlivesPredicate < I , I :: GenericArg > ] ,
425+ span : I :: Span ,
429426 ) {
430427 for & ty:: OutlivesPredicate ( lhs, rhs) in outlives {
431428 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) ,
429+ ty:: GenericArgKind :: Lifetime ( lhs) => delegate . sub_regions ( rhs , lhs, span ) ,
430+ ty:: GenericArgKind :: Type ( lhs) => delegate . register_ty_outlives ( lhs, rhs, span ) ,
434431 ty:: GenericArgKind :: Const ( _) => panic ! ( "const outlives: {lhs:?}: {rhs:?}" ) ,
435432 }
436433 }
437434 }
438435
439- fn register_new_opaque_types ( & mut self , opaque_types : & [ ( ty:: OpaqueTypeKey < I > , I :: Ty ) ] ) {
436+ fn register_new_opaque_types (
437+ delegate : & D ,
438+ opaque_types : & [ ( ty:: OpaqueTypeKey < I > , I :: Ty ) ] ,
439+ span : I :: Span ,
440+ ) {
440441 for & ( key, ty) in opaque_types {
441- let prev = self . delegate . register_hidden_type_in_storage ( key, ty, self . origin_span ) ;
442+ let prev = delegate. register_hidden_type_in_storage ( key, ty, span ) ;
442443 // We eagerly resolve inference variables when computing the query response.
443444 // This can cause previously distinct opaque type keys to now be structurally equal.
444445 //
@@ -447,7 +448,7 @@ where
447448 // types here. However, doing so is difficult as it may result in nested goals and
448449 // any errors may make it harder to track the control flow for diagnostics.
449450 if let Some ( prev) = prev {
450- self . delegate . add_duplicate_opaque_type ( key, prev, self . origin_span ) ;
451+ delegate. add_duplicate_opaque_type ( key, prev, span ) ;
451452 }
452453 }
453454 }
0 commit comments