Remove named nils as early as possible

This commit is contained in:
Joscha 2022-11-22 21:56:50 +01:00
parent f6c9835e29
commit af4311ba98

View file

@ -31,17 +31,17 @@ impl TableLitElem {
impl TableLit {
pub fn desugar(self) -> (Self, bool) {
let (elems, desugared) = self.0.desugar(|e| e.desugar());
if desugared {
(elems.table_lit(), true)
let (elems, removed) = self.0.remove_map(|e| match e {
TableLitElem::Named { value, .. } if matches!(*value, Expr::Lit(Lit::Nil(_))) => {
Err(())
}
e => Ok(e),
});
if removed.is_empty() {
let (elems, desugared) = elems.desugar(|e| e.desugar());
(elems.table_lit(), desugared)
} else {
let (elems, removed) = elems.remove_map(|e| match e {
TableLitElem::Named { value, .. } if matches!(*value, Expr::Lit(Lit::Nil(_))) => {
Err(())
}
e => Ok(e),
});
(elems.table_lit(), !removed.is_empty())
(elems.table_lit(), true)
}
}
}