@@ -33,18 +33,12 @@ use crate::errors;
33
33
34
34
#[ extension( trait RegionExt ) ]
35
35
impl ResolvedArg {
36
- fn early ( param : & GenericParam < ' _ > ) -> ( LocalDefId , ResolvedArg ) {
37
- debug ! ( "ResolvedArg::early: def_id={:?}" , param. def_id) ;
38
- ( param. def_id , ResolvedArg :: EarlyBound ( param. def_id ) )
36
+ fn early ( param : & GenericParam < ' _ > ) -> ResolvedArg {
37
+ ResolvedArg :: EarlyBound ( param. def_id )
39
38
}
40
39
41
- fn late ( idx : u32 , param : & GenericParam < ' _ > ) -> ( LocalDefId , ResolvedArg ) {
42
- let depth = ty:: INNERMOST ;
43
- debug ! (
44
- "ResolvedArg::late: idx={:?}, param={:?} depth={:?} def_id={:?}" ,
45
- idx, param, depth, param. def_id,
46
- ) ;
47
- ( param. def_id , ResolvedArg :: LateBound ( depth, idx, param. def_id ) )
40
+ fn late ( idx : u32 , param : & GenericParam < ' _ > ) -> ResolvedArg {
41
+ ResolvedArg :: LateBound ( ty:: INNERMOST , idx, param. def_id )
48
42
}
49
43
50
44
fn id ( & self ) -> Option < LocalDefId > {
@@ -282,24 +276,18 @@ fn resolve_bound_vars(tcx: TyCtxt<'_>, local_def_id: hir::OwnerId) -> ResolveBou
282
276
283
277
fn late_arg_as_bound_arg < ' tcx > (
284
278
tcx : TyCtxt < ' tcx > ,
285
- arg : & ResolvedArg ,
286
279
param : & GenericParam < ' tcx > ,
287
280
) -> ty:: BoundVariableKind {
288
- match arg {
289
- ResolvedArg :: LateBound ( _, _, def_id) => {
290
- let def_id = def_id. to_def_id ( ) ;
291
- let name = tcx. item_name ( def_id) ;
292
- match param. kind {
293
- GenericParamKind :: Lifetime { .. } => {
294
- ty:: BoundVariableKind :: Region ( ty:: BrNamed ( def_id, name) )
295
- }
296
- GenericParamKind :: Type { .. } => {
297
- ty:: BoundVariableKind :: Ty ( ty:: BoundTyKind :: Param ( def_id, name) )
298
- }
299
- GenericParamKind :: Const { .. } => ty:: BoundVariableKind :: Const ,
300
- }
281
+ let def_id = param. def_id . to_def_id ( ) ;
282
+ let name = tcx. item_name ( def_id) ;
283
+ match param. kind {
284
+ GenericParamKind :: Lifetime { .. } => {
285
+ ty:: BoundVariableKind :: Region ( ty:: BrNamed ( def_id, name) )
301
286
}
302
- _ => bug ! ( "{:?} is not a late argument" , arg) ,
287
+ GenericParamKind :: Type { .. } => {
288
+ ty:: BoundVariableKind :: Ty ( ty:: BoundTyKind :: Param ( def_id, name) )
289
+ }
290
+ GenericParamKind :: Const { .. } => ty:: BoundVariableKind :: Const ,
303
291
}
304
292
}
305
293
@@ -360,10 +348,9 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
360
348
let mut bound_vars: FxIndexMap < LocalDefId , ResolvedArg > = FxIndexMap :: default ( ) ;
361
349
let binders_iter =
362
350
trait_ref. bound_generic_params . iter ( ) . enumerate ( ) . map ( |( late_bound_idx, param) | {
363
- let pair = ResolvedArg :: late ( initial_bound_vars + late_bound_idx as u32 , param) ;
364
- let r = late_arg_as_bound_arg ( self . tcx , & pair. 1 , param) ;
365
- bound_vars. insert ( pair. 0 , pair. 1 ) ;
366
- r
351
+ let arg = ResolvedArg :: late ( initial_bound_vars + late_bound_idx as u32 , param) ;
352
+ bound_vars. insert ( param. def_id , arg) ;
353
+ late_arg_as_bound_arg ( self . tcx , param)
367
354
} ) ;
368
355
binders. extend ( binders_iter) ;
369
356
@@ -458,9 +445,10 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
458
445
. iter ( )
459
446
. enumerate ( )
460
447
. map ( |( late_bound_idx, param) | {
461
- let pair = ResolvedArg :: late ( late_bound_idx as u32 , param) ;
462
- let r = late_arg_as_bound_arg ( self . tcx , & pair. 1 , param) ;
463
- ( pair, r)
448
+ (
449
+ ( param. def_id , ResolvedArg :: late ( late_bound_idx as u32 , param) ) ,
450
+ late_arg_as_bound_arg ( self . tcx , param) ,
451
+ )
464
452
} )
465
453
. unzip ( ) ;
466
454
@@ -492,8 +480,8 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
492
480
let mut bound_vars = FxIndexMap :: default ( ) ;
493
481
debug ! ( ?opaque. generics. params) ;
494
482
for param in opaque. generics . params {
495
- let ( def_id , reg ) = ResolvedArg :: early ( param) ;
496
- bound_vars. insert ( def_id, reg ) ;
483
+ let arg = ResolvedArg :: early ( param) ;
484
+ bound_vars. insert ( param . def_id , arg ) ;
497
485
}
498
486
499
487
let hir_id = self . tcx . local_def_id_to_hir_id ( opaque. def_id ) ;
@@ -618,9 +606,10 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
618
606
. iter ( )
619
607
. enumerate ( )
620
608
. map ( |( late_bound_idx, param) | {
621
- let pair = ResolvedArg :: late ( late_bound_idx as u32 , param) ;
622
- let r = late_arg_as_bound_arg ( self . tcx , & pair. 1 , param) ;
623
- ( pair, r)
609
+ (
610
+ ( param. def_id , ResolvedArg :: late ( late_bound_idx as u32 , param) ) ,
611
+ late_arg_as_bound_arg ( self . tcx , param) ,
612
+ )
624
613
} )
625
614
. unzip ( ) ;
626
615
@@ -870,9 +859,10 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
870
859
. iter ( )
871
860
. enumerate ( )
872
861
. map ( |( late_bound_idx, param) | {
873
- let pair = ResolvedArg :: late ( late_bound_idx as u32 , param) ;
874
- let r = late_arg_as_bound_arg ( self . tcx , & pair. 1 , param) ;
875
- ( pair, r)
862
+ (
863
+ ( param. def_id , ResolvedArg :: late ( late_bound_idx as u32 , param) ) ,
864
+ late_arg_as_bound_arg ( self . tcx , param) ,
865
+ )
876
866
} )
877
867
. unzip ( ) ;
878
868
@@ -1052,19 +1042,21 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
1052
1042
let bound_vars: FxIndexMap < LocalDefId , ResolvedArg > = generics
1053
1043
. params
1054
1044
. iter ( )
1055
- . map ( |param| match param. kind {
1056
- GenericParamKind :: Lifetime { .. } => {
1057
- if self . tcx . is_late_bound ( param. hir_id ) {
1058
- let late_bound_idx = named_late_bound_vars;
1059
- named_late_bound_vars += 1 ;
1060
- ResolvedArg :: late ( late_bound_idx, param)
1061
- } else {
1045
+ . map ( |param| {
1046
+ ( param. def_id , match param. kind {
1047
+ GenericParamKind :: Lifetime { .. } => {
1048
+ if self . tcx . is_late_bound ( param. hir_id ) {
1049
+ let late_bound_idx = named_late_bound_vars;
1050
+ named_late_bound_vars += 1 ;
1051
+ ResolvedArg :: late ( late_bound_idx, param)
1052
+ } else {
1053
+ ResolvedArg :: early ( param)
1054
+ }
1055
+ }
1056
+ GenericParamKind :: Type { .. } | GenericParamKind :: Const { .. } => {
1062
1057
ResolvedArg :: early ( param)
1063
1058
}
1064
- }
1065
- GenericParamKind :: Type { .. } | GenericParamKind :: Const { .. } => {
1066
- ResolvedArg :: early ( param)
1067
- }
1059
+ } )
1068
1060
} )
1069
1061
. collect ( ) ;
1070
1062
@@ -1075,11 +1067,7 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
1075
1067
matches ! ( param. kind, GenericParamKind :: Lifetime { .. } )
1076
1068
&& self . tcx . is_late_bound ( param. hir_id )
1077
1069
} )
1078
- . enumerate ( )
1079
- . map ( |( late_bound_idx, param) | {
1080
- let pair = ResolvedArg :: late ( late_bound_idx as u32 , param) ;
1081
- late_arg_as_bound_arg ( self . tcx , & pair. 1 , param)
1082
- } )
1070
+ . map ( |param| late_arg_as_bound_arg ( self . tcx , param) )
1083
1071
. collect ( ) ;
1084
1072
self . record_late_bound_vars ( hir_id, binders) ;
1085
1073
let scope = Scope :: Binder {
@@ -1096,7 +1084,8 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
1096
1084
where
1097
1085
F : for <' b , ' c > FnOnce ( & ' b mut BoundVarContext < ' c , ' tcx > ) ,
1098
1086
{
1099
- let bound_vars = generics. params . iter ( ) . map ( ResolvedArg :: early) . collect ( ) ;
1087
+ let bound_vars =
1088
+ generics. params . iter ( ) . map ( |param| ( param. def_id , ResolvedArg :: early ( param) ) ) . collect ( ) ;
1100
1089
self . record_late_bound_vars ( hir_id, vec ! [ ] ) ;
1101
1090
let scope = Scope :: Binder {
1102
1091
hir_id,
0 commit comments