@@ -56,22 +56,23 @@ where
56
56
///
57
57
/// This expects `goal` and `opaque_types` to be eager resolved.
58
58
pub ( super ) fn canonicalize_goal (
59
- & self ,
59
+ delegate : & D ,
60
60
goal : Goal < I , I :: Predicate > ,
61
61
opaque_types : Vec < ( ty:: OpaqueTypeKey < I > , I :: Ty ) > ,
62
62
) -> ( Vec < I :: GenericArg > , CanonicalInput < I , I :: Predicate > ) {
63
63
let mut orig_values = Default :: default ( ) ;
64
64
let canonical = Canonicalizer :: canonicalize_input (
65
- self . delegate ,
65
+ delegate,
66
66
& mut orig_values,
67
67
QueryInput {
68
68
goal,
69
- predefined_opaques_in_body : self
69
+ predefined_opaques_in_body : delegate
70
70
. cx ( )
71
71
. mk_predefined_opaques_in_body ( PredefinedOpaquesData { opaque_types } ) ,
72
72
} ,
73
73
) ;
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 ( ) } ;
75
76
( orig_values, query_input)
76
77
}
77
78
@@ -271,37 +272,32 @@ where
271
272
/// - we apply the `external_constraints` returned by the query, returning
272
273
/// the `normalization_nested_goals`
273
274
pub ( super ) fn instantiate_and_apply_query_response (
274
- & mut self ,
275
+ delegate : & D ,
275
276
param_env : I :: ParamEnv ,
276
277
original_values : & [ I :: GenericArg ] ,
277
278
response : CanonicalResponse < I > ,
279
+ span : I :: Span ,
278
280
) -> ( NestedNormalizationGoals < I > , Certainty ) {
279
281
let instantiation = Self :: compute_query_response_instantiation_values (
280
- self . delegate ,
282
+ delegate,
281
283
& original_values,
282
284
& response,
283
- self . origin_span ,
285
+ span ,
284
286
) ;
285
287
286
288
let Response { var_values, external_constraints, certainty } =
287
- self . delegate . instantiate_canonical ( response, instantiation) ;
289
+ delegate. instantiate_canonical ( response, instantiation) ;
288
290
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) ;
296
292
297
293
let ExternalConstraintsData {
298
294
region_constraints,
299
295
opaque_types,
300
296
normalization_nested_goals,
301
297
} = & * external_constraints;
302
298
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 ) ;
305
301
306
302
( normalization_nested_goals. clone ( ) , certainty)
307
303
}
@@ -424,21 +420,26 @@ where
424
420
}
425
421
426
422
fn register_region_constraints (
427
- & mut self ,
423
+ delegate : & D ,
428
424
outlives : & [ ty:: OutlivesPredicate < I , I :: GenericArg > ] ,
425
+ span : I :: Span ,
429
426
) {
430
427
for & ty:: OutlivesPredicate ( lhs, rhs) in outlives {
431
428
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 ) ,
434
431
ty:: GenericArgKind :: Const ( _) => panic ! ( "const outlives: {lhs:?}: {rhs:?}" ) ,
435
432
}
436
433
}
437
434
}
438
435
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
+ ) {
440
441
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 ) ;
442
443
// We eagerly resolve inference variables when computing the query response.
443
444
// This can cause previously distinct opaque type keys to now be structurally equal.
444
445
//
@@ -447,7 +448,7 @@ where
447
448
// types here. However, doing so is difficult as it may result in nested goals and
448
449
// any errors may make it harder to track the control flow for diagnostics.
449
450
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 ) ;
451
452
}
452
453
}
453
454
}
0 commit comments