Skip to content

Commit c887f52

Browse files
committed
Clean up argument handling code
1 parent af54371 commit c887f52

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

chalk-solve/src/clauses/builtin_traits/fn_family.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,12 @@ pub fn add_fn_trait_program_clauses<I: Interner>(
2323
match self_ty.data(interner) {
2424
TyData::Function(fn_val) => {
2525
let (binders, orig_sub) = fn_val.into_binders_and_value(interner);
26-
// Take all of the arguments except for the last one, which
27-
// represents the return type
28-
let arg_sub = Substitution::from(
29-
interner,
30-
orig_sub.iter(interner).take(orig_sub.len(interner) - 1),
31-
);
32-
let fn_output_ty = orig_sub
33-
.at(interner, orig_sub.len(interner) - 1)
34-
.assert_ty_ref(interner);
26+
let all_params: Vec<_> = orig_sub.iter(interner).cloned().collect();
27+
28+
// The last parameter represents the function return type
29+
let (arg_sub, fn_output_ty) = all_params.split_at(all_params.len() - 1);
30+
let arg_sub = Substitution::from(interner, arg_sub);
31+
let fn_output_ty = fn_output_ty[0].assert_ty_ref(interner);
3532

3633
// We are constructing a reference to `FnOnce<Args>`, where
3734
// `Args` is a tuple of the function's argument types

0 commit comments

Comments
 (0)