Fixme for union fields

This commit is contained in:
Aleksey Kladov 2019-11-25 17:34:15 +03:00
parent 5fd68b5929
commit 1455663ea1
4 changed files with 9 additions and 0 deletions

View File

@ -263,6 +263,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
.clone()
.subst(&a_ty.parameters)
}),
// FIXME:
TypeCtor::Adt(Adt::Union(_)) => None,
_ => None,
},
_ => None,

View File

@ -561,6 +561,7 @@ pub(crate) fn field_types_query(
) -> Arc<ArenaMap<LocalStructFieldId, Ty>> {
let (resolver, var_data) = match variant_id {
VariantId::StructId(it) => (it.resolver(db), db.struct_data(it).variant_data.clone()),
VariantId::UnionId(it) => (it.resolver(db), db.union_data(it).variant_data.clone()),
VariantId::EnumVariantId(it) => (
it.parent.resolver(db),
db.enum_data(it.parent).variants[it.local_id].variant_data.clone(),

View File

@ -150,6 +150,11 @@ impl HasChildSource for VariantId {
src.map(|map| map[it.local_id].kind())
}
VariantId::StructId(it) => it.source(db).map(|it| it.kind()),
VariantId::UnionId(it) => it.source(db).map(|it| {
it.record_field_def_list()
.map(ast::StructKind::Record)
.unwrap_or(ast::StructKind::Unit)
}),
};
let mut trace = Trace::new_for_map();
lower_struct(&mut trace, &src.value);

View File

@ -431,6 +431,7 @@ impl_froms!(
pub enum VariantId {
EnumVariantId(EnumVariantId),
StructId(StructId),
UnionId(UnionId),
}
impl_froms!(VariantId: EnumVariantId, StructId);