Desugar literals

This commit is contained in:
Joscha 2022-11-21 12:05:24 +01:00
parent 8278442d3f
commit 52c1aeba35
4 changed files with 62 additions and 3 deletions

54
src/desugar/lit.rs Normal file
View file

@ -0,0 +1,54 @@
use crate::ast::{Lit, TableLit, TableLitElem};
impl TableLitElem {
pub fn desugar(self) -> (Self, bool) {
match self {
Self::Positional(expr) => {
let (expr, desugared) = expr.desugar();
(Self::Positional(Box::new(expr)), desugared)
}
Self::Named {
name,
s0,
s1,
value,
span,
} => {
let (value, desugared) = value.desugar();
let new = Self::Named {
name,
s0,
s1,
value: Box::new(value),
span,
};
(new, desugared)
}
}
}
}
impl TableLit {
pub fn desugar(self) -> (Self, bool) {
let (elems, desugared) = self.elems.desugar_elem(|e| e.desugar());
let new = Self {
s0: self.s0,
elems,
s1: self.s1,
span: self.span,
};
(new, desugared)
}
}
impl Lit {
pub fn desugar(self) -> (Self, bool) {
match self {
Self::Table(table) => {
let (table, desugared) = table.desugar();
(Self::Table(table), desugared)
}
lit => (lit, false),
}
}
}