@@ -316,36 +316,43 @@ impl<'a, 'gcx, 'tcx> ConfirmContext<'a, 'gcx, 'tcx> {
316
316
// variables.
317
317
let method_generics = self . tcx . generics_of ( pick. item . def_id ) ;
318
318
let supress_mismatch = self . fcx . check_impl_trait ( self . span , segment, & method_generics) ;
319
- self . fcx . check_generic_arg_count ( self . span , & segment, & method_generics, true , supress_mismatch) ;
319
+ self . fcx . check_generic_arg_count ( self . span , & segment, & method_generics, true ,
320
+ supress_mismatch) ;
320
321
321
322
// Create subst for early-bound lifetime parameters, combining
322
323
// parameters from the type and those from the method.
323
324
assert_eq ! ( method_generics. parent_count, parent_substs. len( ) ) ;
324
325
let provided = & segment. args ;
325
326
let own_counts = method_generics. own_counts ( ) ;
326
327
// FIXME(varkor): Separating out the parameters is messy.
327
- let lifetimes: Vec < _ > = provided. iter ( ) . flat_map ( |data| data. args . iter ( ) . filter_map ( |arg| match arg {
328
- GenericArg :: Lifetime ( ty) => Some ( ty) ,
329
- _ => None ,
330
- } ) ) . collect ( ) ;
331
- let types: Vec < _ > = provided. iter ( ) . flat_map ( |data| data. args . iter ( ) . filter_map ( |arg| match arg {
332
- GenericArg :: Type ( ty) => Some ( ty) ,
333
- _ => None ,
334
- } ) ) . collect ( ) ;
328
+ let lifetimes: Vec < _ > = provided. iter ( ) . flat_map ( |data| {
329
+ data. args . iter ( ) . filter_map ( |arg| match arg {
330
+ GenericArg :: Lifetime ( ty) => Some ( ty) ,
331
+ _ => None ,
332
+ } )
333
+ } ) . collect ( ) ;
334
+ let types: Vec < _ > = provided. iter ( ) . flat_map ( |data| {
335
+ data. args . iter ( ) . filter_map ( |arg| match arg {
336
+ GenericArg :: Type ( ty) => Some ( ty) ,
337
+ _ => None ,
338
+ } )
339
+ } ) . collect ( ) ;
335
340
Substs :: for_item ( self . tcx , pick. item . def_id , |param, _| {
336
341
let i = param. index as usize ;
337
342
if i < parent_substs. len ( ) {
338
343
parent_substs[ i]
339
344
} else {
340
345
match param. kind {
341
346
GenericParamDefKind :: Lifetime => {
342
- if let Some ( lifetime) = lifetimes. get ( i - parent_substs. len ( ) ) {
347
+ let idx = i - parent_substs. len ( ) ;
348
+ if let Some ( lifetime) = lifetimes. get ( idx) {
343
349
return AstConv :: ast_region_to_region (
344
350
self . fcx , lifetime, Some ( param) ) . into ( ) ;
345
351
}
346
352
}
347
353
GenericParamDefKind :: Type { .. } => {
348
- if let Some ( ast_ty) = types. get ( i - parent_substs. len ( ) - own_counts. lifetimes ) {
354
+ let idx = i - parent_substs. len ( ) - own_counts. lifetimes ;
355
+ if let Some ( ast_ty) = types. get ( idx) {
349
356
return self . to_ty ( ast_ty) . into ( ) ;
350
357
}
351
358
}
0 commit comments