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.rs105
1 files changed, 51 insertions, 54 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs
index 630f43d362..25b449ab85 100644
--- a/crates/hir-ty/src/lower.rs
+++ b/crates/hir-ty/src/lower.rs
@@ -243,7 +243,7 @@ impl<'a> TyLoweringContext<'a> {
}
fn generics(&self) -> &Generics {
- self.generics.get_or_init(|| generics(self.db.upcast(), self.def))
+ self.generics.get_or_init(|| generics(self.db, self.def))
}
pub fn lower_ty_ext(&mut self, type_ref_id: TypeRefId) -> (Ty, Option<TypeNs>) {
@@ -356,8 +356,7 @@ impl<'a> TyLoweringContext<'a> {
|a| ImplTraitId::TypeAliasImplTrait(a, idx),
);
let opaque_ty_id = self.db.intern_impl_trait_id(impl_trait_id).into();
- let generics =
- generics(self.db.upcast(), origin.either(|f| f.into(), |a| a.into()));
+ let generics = generics(self.db, origin.either(|f| f.into(), |a| a.into()));
let parameters = generics.bound_vars_subst(self.db, self.in_binders);
TyKind::OpaqueType(opaque_ty_id, parameters).intern(Interner)
}
@@ -771,7 +770,7 @@ fn named_associated_type_shorthand_candidates<R>(
// 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.upcast(), def).len_self();
+ 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)
.build();
@@ -797,9 +796,9 @@ fn named_associated_type_shorthand_candidates<R>(
}
// Handle `Self::Type` referring to own associated type in trait definitions
if let GenericDefId::TraitId(trait_id) = param_id.parent() {
- let trait_generics = generics(db.upcast(), trait_id.into());
+ let trait_generics = generics(db, trait_id.into());
if trait_generics[param_id.local_id()].is_trait_self() {
- let def_generics = generics(db.upcast(), def);
+ 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
@@ -839,13 +838,11 @@ pub(crate) fn field_types_with_diagnostics_query(
) -> (Arc<ArenaMap<LocalFieldId, Binders<Ty>>>, Diagnostics) {
let var_data = db.variant_fields(variant_id);
let (resolver, def): (_, GenericDefId) = match variant_id {
- VariantId::StructId(it) => (it.resolver(db.upcast()), it.into()),
- VariantId::UnionId(it) => (it.resolver(db.upcast()), it.into()),
- VariantId::EnumVariantId(it) => {
- (it.resolver(db.upcast()), it.lookup(db.upcast()).parent.into())
- }
+ VariantId::StructId(it) => (it.resolver(db), it.into()),
+ VariantId::UnionId(it) => (it.resolver(db), it.into()),
+ VariantId::EnumVariantId(it) => (it.resolver(db), it.lookup(db).parent.into()),
};
- let generics = generics(db.upcast(), def);
+ let generics = generics(db, def);
let mut res = ArenaMap::default();
let mut ctx = TyLoweringContext::new(db, &resolver, &var_data.store, def)
.with_type_param_mode(ParamLoweringMode::Variable);
@@ -869,8 +866,8 @@ pub(crate) fn generic_predicates_for_param_query(
param_id: TypeOrConstParamId,
assoc_name: Option<Name>,
) -> GenericPredicates {
- let generics = generics(db.upcast(), def);
- let resolver = def.resolver(db.upcast());
+ let generics = generics(db, def);
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, generics.store(), def)
.with_type_param_mode(ParamLoweringMode::Variable);
@@ -903,12 +900,12 @@ pub(crate) fn generic_predicates_for_param_query(
let Some(assoc_name) = &assoc_name else { return true };
let Some(TypeNs::TraitId(tr)) =
- resolver.resolve_path_in_type_ns_fully(db.upcast(), path)
+ resolver.resolve_path_in_type_ns_fully(db, path)
else {
return false;
};
- all_super_traits(db.upcast(), tr).iter().any(|tr| {
+ all_super_traits(db, tr).iter().any(|tr| {
db.trait_items(*tr).items.iter().any(|(name, item)| {
matches!(item, AssocItemId::TypeAliasId(_)) && name == assoc_name
})
@@ -968,8 +965,8 @@ pub(crate) fn trait_environment_for_body_query(
db: &dyn HirDatabase,
def: DefWithBodyId,
) -> Arc<TraitEnvironment> {
- let Some(def) = def.as_generic_def_id(db.upcast()) else {
- let krate = def.module(db.upcast()).krate();
+ let Some(def) = def.as_generic_def_id(db) else {
+ let krate = def.module(db).krate();
return TraitEnvironment::empty(krate);
};
db.trait_environment(def)
@@ -979,8 +976,8 @@ pub(crate) fn trait_environment_query(
db: &dyn HirDatabase,
def: GenericDefId,
) -> Arc<TraitEnvironment> {
- let generics = generics(db.upcast(), def);
- let resolver = def.resolver(db.upcast());
+ let generics = generics(db, def);
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, generics.store(), def)
.with_type_param_mode(ParamLoweringMode::Placeholder);
let mut traits_in_scope = Vec::new();
@@ -1001,7 +998,7 @@ pub(crate) fn trait_environment_query(
}
}
- if let Some(trait_id) = def.assoc_trait_container(db.upcast()) {
+ if let Some(trait_id) = def.assoc_trait_container(db) {
// add `Self: Trait<T1, T2, ...>` to the environment in trait
// function default implementations (and speculative code
// inside consts or type aliases)
@@ -1076,8 +1073,8 @@ fn generic_predicates_filtered_by<F>(
where
F: Fn(&WherePredicate, GenericDefId) -> bool,
{
- let generics = generics(db.upcast(), def);
- let resolver = def.resolver(db.upcast());
+ let generics = generics(db, def);
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, generics.store(), def)
.with_type_param_mode(ParamLoweringMode::Variable);
@@ -1128,7 +1125,7 @@ fn implicitly_sized_clauses<'a, 'subst: 'a>(
.lang_item(resolver.krate(), LangItem::Sized)
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id))?;
- let trait_self_idx = trait_self_param_idx(db.upcast(), def);
+ let trait_self_idx = trait_self_param_idx(db, def);
Some(
substitution
@@ -1172,11 +1169,11 @@ pub(crate) fn generic_defaults_with_diagnostics_query(
db: &dyn HirDatabase,
def: GenericDefId,
) -> (GenericDefaults, Diagnostics) {
- let generic_params = generics(db.upcast(), def);
+ let generic_params = generics(db, def);
if generic_params.len() == 0 {
return (GenericDefaults(None), None);
}
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let parent_start_idx = generic_params.len_self();
let mut ctx = TyLoweringContext::new(db, &resolver, generic_params.store(), def)
@@ -1249,7 +1246,7 @@ pub(crate) fn generic_defaults_with_diagnostics_recover(
_cycle: &Cycle,
def: GenericDefId,
) -> (GenericDefaults, Diagnostics) {
- let generic_params = generics(db.upcast(), def);
+ let generic_params = generics(db, def);
if generic_params.len() == 0 {
return (GenericDefaults(None), None);
}
@@ -1268,7 +1265,7 @@ pub(crate) fn generic_defaults_with_diagnostics_recover(
fn fn_sig_for_fn(db: &dyn HirDatabase, def: FunctionId) -> PolyFnSig {
let data = db.function_signature(def);
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let mut ctx_params = TyLoweringContext::new(db, &resolver, &data.store, def.into())
.with_type_param_mode(ParamLoweringMode::Variable);
let params = data.params.iter().map(|&tr| ctx_params.lower_ty(tr));
@@ -1282,7 +1279,7 @@ fn fn_sig_for_fn(db: &dyn HirDatabase, def: FunctionId) -> PolyFnSig {
}
None => TyKind::Tuple(0, Substitution::empty(Interner)).intern(Interner),
};
- let generics = generics(db.upcast(), def.into());
+ let generics = generics(db, def.into());
let sig = CallableSig::from_params_and_return(
params,
ret,
@@ -1296,7 +1293,7 @@ fn fn_sig_for_fn(db: &dyn HirDatabase, def: FunctionId) -> PolyFnSig {
/// Build the declared type of a function. This should not need to look at the
/// function body.
fn type_for_fn(db: &dyn HirDatabase, def: FunctionId) -> Binders<Ty> {
- let generics = generics(db.upcast(), def.into());
+ let generics = generics(db, def.into());
let substs = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
make_binders(
db,
@@ -1308,8 +1305,8 @@ fn type_for_fn(db: &dyn HirDatabase, def: FunctionId) -> Binders<Ty> {
/// Build the declared type of a const.
fn type_for_const(db: &dyn HirDatabase, def: ConstId) -> Binders<Ty> {
let data = db.const_signature(def);
- let generics = generics(db.upcast(), def.into());
- let resolver = def.resolver(db.upcast());
+ let generics = generics(db, def.into());
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &data.store, def.into())
.with_type_param_mode(ParamLoweringMode::Variable);
@@ -1319,7 +1316,7 @@ fn type_for_const(db: &dyn HirDatabase, def: ConstId) -> Binders<Ty> {
/// Build the declared type of a static.
fn type_for_static(db: &dyn HirDatabase, def: StaticId) -> Binders<Ty> {
let data = db.static_signature(def);
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &data.store, def.into());
Binders::empty(Interner, ctx.lower_ty(data.type_ref))
@@ -1328,7 +1325,7 @@ fn type_for_static(db: &dyn HirDatabase, def: StaticId) -> Binders<Ty> {
fn fn_sig_for_struct_constructor(db: &dyn HirDatabase, def: StructId) -> PolyFnSig {
let struct_data = db.variant_fields(def.into());
let fields = struct_data.fields();
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &struct_data.store, def.into())
.with_type_param_mode(ParamLoweringMode::Variable);
let params = fields.iter().map(|(_, field)| ctx.lower_ty(field.type_ref));
@@ -1346,7 +1343,7 @@ fn type_for_struct_constructor(db: &dyn HirDatabase, def: StructId) -> Option<Bi
FieldsShape::Record => None,
FieldsShape::Unit => Some(type_for_adt(db, def.into())),
FieldsShape::Tuple => {
- let generics = generics(db.upcast(), AdtId::from(def).into());
+ let generics = generics(db, AdtId::from(def).into());
let substs = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
Some(make_binders(
db,
@@ -1360,8 +1357,8 @@ fn type_for_struct_constructor(db: &dyn HirDatabase, def: StructId) -> Option<Bi
fn fn_sig_for_enum_variant_constructor(db: &dyn HirDatabase, def: EnumVariantId) -> PolyFnSig {
let var_data = db.variant_fields(def.into());
let fields = var_data.fields();
- let resolver = def.resolver(db.upcast());
- let parent = def.lookup(db.upcast()).parent;
+ let resolver = def.resolver(db);
+ let parent = def.lookup(db).parent;
let mut ctx = TyLoweringContext::new(db, &resolver, &var_data.store, parent.into())
.with_type_param_mode(ParamLoweringMode::Variable);
let params = fields.iter().map(|(_, field)| ctx.lower_ty(field.type_ref));
@@ -1377,12 +1374,12 @@ fn type_for_enum_variant_constructor(
db: &dyn HirDatabase,
def: EnumVariantId,
) -> Option<Binders<Ty>> {
- let e = def.lookup(db.upcast()).parent;
+ let e = def.lookup(db).parent;
match db.variant_fields(def.into()).shape {
FieldsShape::Record => None,
FieldsShape::Unit => Some(type_for_adt(db, e.into())),
FieldsShape::Tuple => {
- let generics = generics(db.upcast(), e.into());
+ let generics = generics(db, e.into());
let substs = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
Some(make_binders(
db,
@@ -1404,12 +1401,12 @@ pub(crate) fn type_for_adt_recovery(
_cycle: &salsa::Cycle,
adt: AdtId,
) -> Binders<Ty> {
- let generics = generics(db.upcast(), adt.into());
+ let generics = generics(db, adt.into());
make_binders(db, &generics, TyKind::Error.intern(Interner))
}
fn type_for_adt(db: &dyn HirDatabase, adt: AdtId) -> Binders<Ty> {
- let generics = generics(db.upcast(), adt.into());
+ let generics = generics(db, adt.into());
let subst = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
let ty = TyKind::Adt(crate::AdtId(adt), subst).intern(Interner);
make_binders(db, &generics, ty)
@@ -1419,13 +1416,13 @@ pub(crate) fn type_for_type_alias_with_diagnostics_query(
db: &dyn HirDatabase,
t: TypeAliasId,
) -> (Binders<Ty>, Diagnostics) {
- let generics = generics(db.upcast(), t.into());
+ let generics = generics(db, t.into());
let type_alias_data = db.type_alias_signature(t);
let mut diags = None;
let inner = if type_alias_data.flags.contains(TypeAliasFlags::IS_EXTERN) {
TyKind::Foreign(crate::to_foreign_def_id(t)).intern(Interner)
} else {
- let resolver = t.resolver(db.upcast());
+ let resolver = t.resolver(db);
let alias = db.type_alias_signature(t);
let mut ctx = TyLoweringContext::new(db, &resolver, &alias.store, t.into())
.with_impl_trait_mode(ImplTraitLoweringMode::Opaque)
@@ -1446,7 +1443,7 @@ pub(crate) fn type_for_type_alias_with_diagnostics_query_recover(
_cycle: &salsa::Cycle,
adt: TypeAliasId,
) -> (Binders<Ty>, Diagnostics) {
- let generics = generics(db.upcast(), adt.into());
+ let generics = generics(db, adt.into());
(make_binders(db, &generics, TyKind::Error.intern(Interner)), None)
}
@@ -1475,7 +1472,7 @@ impl ValueTyDefId {
Self::FunctionId(id) => id.into(),
Self::StructId(id) => id.into(),
Self::UnionId(id) => id.into(),
- Self::EnumVariantId(var) => var.lookup(db.upcast()).parent.into(),
+ Self::EnumVariantId(var) => var.lookup(db).parent.into(),
Self::ConstId(id) => id.into(),
Self::StaticId(id) => id.into(),
}
@@ -1514,8 +1511,8 @@ pub(crate) fn impl_self_ty_with_diagnostics_query(
impl_id: ImplId,
) -> (Binders<Ty>, Diagnostics) {
let impl_data = db.impl_signature(impl_id);
- let resolver = impl_id.resolver(db.upcast());
- let generics = generics(db.upcast(), impl_id.into());
+ let resolver = impl_id.resolver(db);
+ let generics = generics(db, impl_id.into());
let mut ctx = TyLoweringContext::new(db, &resolver, &impl_data.store, impl_id.into())
.with_type_param_mode(ParamLoweringMode::Variable);
(
@@ -1535,7 +1532,7 @@ pub(crate) fn const_param_ty_with_diagnostics_query(
) -> (Ty, Diagnostics) {
let (parent_data, store) = db.generic_params_and_store(def.parent());
let data = &parent_data[def.local_id()];
- let resolver = def.parent().resolver(db.upcast());
+ let resolver = def.parent().resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &store, def.parent());
let ty = match data {
TypeOrConstParamData::TypeParamData(_) => {
@@ -1552,7 +1549,7 @@ pub(crate) fn impl_self_ty_with_diagnostics_recover(
_cycle: &salsa::Cycle,
impl_id: ImplId,
) -> (Binders<Ty>, Diagnostics) {
- let generics = generics(db.upcast(), (impl_id).into());
+ let generics = generics(db, (impl_id).into());
(make_binders(db, &generics, TyKind::Error.intern(Interner)), None)
}
@@ -1565,7 +1562,7 @@ pub(crate) fn impl_trait_with_diagnostics_query(
impl_id: ImplId,
) -> Option<(Binders<TraitRef>, Diagnostics)> {
let impl_data = db.impl_signature(impl_id);
- let resolver = impl_id.resolver(db.upcast());
+ let resolver = impl_id.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &impl_data.store, impl_id.into())
.with_type_param_mode(ParamLoweringMode::Variable);
let (self_ty, binders) = db.impl_self_ty(impl_id).into_value_and_skipped_binders();
@@ -1580,14 +1577,14 @@ pub(crate) fn return_type_impl_traits(
) -> Option<Arc<Binders<ImplTraits>>> {
// FIXME unify with fn_sig_for_fn instead of doing lowering twice, maybe
let data = db.function_signature(def);
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let mut ctx_ret = TyLoweringContext::new(db, &resolver, &data.store, def.into())
.with_impl_trait_mode(ImplTraitLoweringMode::Opaque)
.with_type_param_mode(ParamLoweringMode::Variable);
if let Some(ret_type) = data.ret_type {
let _ret = ctx_ret.lower_ty(ret_type);
}
- let generics = generics(db.upcast(), def.into());
+ let generics = generics(db, def.into());
let return_type_impl_traits =
ImplTraits { impl_traits: ctx_ret.impl_trait_mode.opaque_type_data };
if return_type_impl_traits.impl_traits.is_empty() {
@@ -1602,7 +1599,7 @@ pub(crate) fn type_alias_impl_traits(
def: hir_def::TypeAliasId,
) -> Option<Arc<Binders<ImplTraits>>> {
let data = db.type_alias_signature(def);
- let resolver = def.resolver(db.upcast());
+ let resolver = def.resolver(db);
let mut ctx = TyLoweringContext::new(db, &resolver, &data.store, def.into())
.with_impl_trait_mode(ImplTraitLoweringMode::Opaque)
.with_type_param_mode(ParamLoweringMode::Variable);
@@ -1613,7 +1610,7 @@ pub(crate) fn type_alias_impl_traits(
if type_alias_impl_traits.impl_traits.is_empty() {
None
} else {
- let generics = generics(db.upcast(), def.into());
+ let generics = generics(db, def.into());
Some(Arc::new(make_binders(db, &generics, type_alias_impl_traits)))
}
}