From 736174d470e188899d5c1911049c3fb7eee154dc Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 22 Nov 2022 17:49:12 +0100 Subject: [PATCH] Desugar away named nil in table literals --- src/desugar/lit.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/desugar/lit.rs b/src/desugar/lit.rs index a514ef9..f5942b5 100644 --- a/src/desugar/lit.rs +++ b/src/desugar/lit.rs @@ -1,4 +1,4 @@ -use crate::ast::{Lit, TableLit, TableLitElem}; +use crate::ast::{Expr, Lit, TableLit, TableLitElem}; impl TableLitElem { pub fn desugar(self) -> (Self, bool) { @@ -32,7 +32,17 @@ impl TableLitElem { impl TableLit { pub fn desugar(self) -> (Self, bool) { let (elems, desugared) = self.0.desugar(|e| e.desugar()); - (elems.table_lit(), desugared) + 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(_))) => { + Err(()) + } + e => Ok(e), + }); + (elems.table_lit(), !removed.is_empty()) + } } }