feat: add Type::NamedTuple

This commit is contained in:
Shunsuke Shibayama 2023-08-17 02:00:44 +09:00
parent bcebe04f3a
commit ea0089f7df
9 changed files with 185 additions and 1 deletions

View file

@ -217,6 +217,13 @@ impl Generalizer {
.collect();
Type::Record(fields)
}
NamedTuple(rec) => {
let fields = rec
.into_iter()
.map(|(name, t)| (name, self.generalize_t(t, uninit)))
.collect();
Type::NamedTuple(fields)
}
Callable { .. } => todo!(),
Ref(t) => ref_(self.generalize_t(*t, uninit)),
RefMut { before, after } => {
@ -672,6 +679,12 @@ impl<'c, 'q, 'l, L: Locational> Dereferencer<'c, 'q, 'l, L> {
}
Ok(Type::Record(rec))
}
Type::NamedTuple(mut rec) => {
for (_, t) in rec.iter_mut() {
*t = self.deref_tyvar(mem::take(t))?;
}
Ok(Type::NamedTuple(rec))
}
Type::Refinement(refine) => {
let t = self.deref_tyvar(*refine.t)?;
// TODO: deref_predicate