Do not repeat idx

This commit is contained in:
Mu42
2023-04-02 10:48:01 +08:00
parent 0f6312f643
commit bbfbecd59f
3 changed files with 66 additions and 5 deletions

View File

@@ -1156,14 +1156,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
// ```
// which includes the replacement of the first two `()` for the correct type, and the
// removal of the last `()`.
let mut prev = -1;
let mut idx = -1;
for (expected_idx, provided_idx) in matched_inputs.iter_enumerated() {
// We want to point not at the *current* argument expression index, but rather at the
// index position where it *should have been*, which is *after* the previous one.
if let Some(provided_idx) = provided_idx {
prev = provided_idx.index() as i64;
}
let idx = ProvidedIdx::from_usize((prev + 1) as usize);
idx = match provided_idx {
Some(provided_idx) => provided_idx.index() as i64 + 1,
None => idx + 1,
};
let idx = ProvidedIdx::from_usize(idx as usize);
if let None = provided_idx
&& let Some((_, arg_span)) = provided_arg_tys.get(idx)
{