mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 10:49:54 +00:00
feat: add Type::NamedTuple
This commit is contained in:
parent
bcebe04f3a
commit
ea0089f7df
9 changed files with 185 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue