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

@ -507,6 +507,15 @@ impl Context {
}
true
}
(NamedTuple(lhs), NamedTuple(rhs)) => {
for ((l_k, l_t), (r_k, r_t)) in lhs.iter().zip(rhs.iter()) {
if (l_k.vis.is_public() && r_k.vis.is_private()) || !self.supertype_of(l_t, r_t)
{
return false;
}
}
true
}
(Type, Record(rec)) => {
for (_, t) in rec.iter() {
if !self.supertype_of(&Type, t) {
@ -758,6 +767,7 @@ impl Context {
match t {
Type::FreeVar(fv) if fv.is_linked() => self.fields(&fv.crack()),
Type::Record(fields) => fields.clone(),
Type::NamedTuple(fields) => fields.iter().cloned().collect(),
Type::Refinement(refine) => self.fields(&refine.t),
Type::Structural(t) => self.fields(t),
other => {