Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/lower.rs')
| -rw-r--r-- | crates/hir-ty/src/lower.rs | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index 2d2ec2866e..57849ff913 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -769,14 +769,8 @@ fn named_associated_type_shorthand_candidates<R>( let impl_id_as_generic_def: GenericDefId = impl_id.into(); if impl_id_as_generic_def != def { - // `trait_ref` contains `BoundVar`s bound by impl's `Binders`, but here we need - // `BoundVar`s from `def`'s point of view. - // FIXME: A `HirDatabase` query may be handy if this process is needed in more - // places. It'd be almost identical as `impl_trait_query` where `resolver` would be - // of `def` instead of `impl_id`. - let starting_idx = generics(db, def).len_self(); let subst = TyBuilder::subst_for_def(db, impl_id, None) - .fill_with_bound_vars(DebruijnIndex::INNERMOST, starting_idx) + .fill_with_bound_vars(DebruijnIndex::INNERMOST, 0) .build(); let trait_ref = subst.apply(trait_ref, Interner); search(trait_ref) @@ -802,16 +796,8 @@ fn named_associated_type_shorthand_candidates<R>( if let GenericDefId::TraitId(trait_id) = param_id.parent() { let trait_generics = generics(db, trait_id.into()); if trait_generics[param_id.local_id()].is_trait_self() { - let def_generics = generics(db, def); - let starting_idx = match def { - GenericDefId::TraitId(_) => 0, - // `def` is an item within trait. We need to substitute `BoundVar`s but - // remember that they are for parent (i.e. trait) generic params so they - // come after our own params. - _ => def_generics.len_self(), - }; let trait_ref = TyBuilder::trait_ref(db, trait_id) - .fill_with_bound_vars(DebruijnIndex::INNERMOST, starting_idx) + .fill_with_bound_vars(DebruijnIndex::INNERMOST, 0) .build(); return search(trait_ref); } @@ -1181,7 +1167,6 @@ pub(crate) fn generic_defaults_with_diagnostics_query( return (GenericDefaults(None), None); } let resolver = def.resolver(db); - let parent_start_idx = generic_params.len_self(); let mut ctx = TyLoweringContext::new(db, &resolver, generic_params.store(), def) .with_impl_trait_mode(ImplTraitLoweringMode::Disallowed) @@ -1190,8 +1175,7 @@ pub(crate) fn generic_defaults_with_diagnostics_query( let mut defaults = generic_params .iter_self() .map(|(id, p)| { - let result = - handle_generic_param(&mut ctx, idx, id, p, parent_start_idx, &generic_params); + let result = handle_generic_param(&mut ctx, idx, id, p, &generic_params); idx += 1; result }) @@ -1199,7 +1183,7 @@ pub(crate) fn generic_defaults_with_diagnostics_query( let diagnostics = create_diagnostics(mem::take(&mut ctx.diagnostics)); defaults.extend(generic_params.iter_parents_with_store().map(|((id, p), store)| { ctx.store = store; - let result = handle_generic_param(&mut ctx, idx, id, p, parent_start_idx, &generic_params); + let result = handle_generic_param(&mut ctx, idx, id, p, &generic_params); idx += 1; result })); @@ -1211,7 +1195,6 @@ pub(crate) fn generic_defaults_with_diagnostics_query( idx: usize, id: GenericParamId, p: GenericParamDataRef<'_>, - parent_start_idx: usize, generic_params: &Generics, ) -> Binders<crate::GenericArg> { match p { @@ -1220,7 +1203,7 @@ pub(crate) fn generic_defaults_with_diagnostics_query( // Each default can only refer to previous parameters. // Type variable default referring to parameter coming // after it is forbidden (FIXME: report diagnostic) - fallback_bound_vars(ctx.lower_ty(*ty), idx, parent_start_idx) + fallback_bound_vars(ctx.lower_ty(*ty), idx, 0) }); crate::make_binders(ctx.db, generic_params, ty.cast(Interner)) } @@ -1238,7 +1221,7 @@ pub(crate) fn generic_defaults_with_diagnostics_query( }, ); // Each default can only refer to previous parameters, see above. - val = fallback_bound_vars(val, idx, parent_start_idx); + val = fallback_bound_vars(val, idx, 0); make_binders(ctx.db, generic_params, val) } GenericParamDataRef::LifetimeParamData(_) => { |