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