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