54 lines
1.3 KiB
Rust
54 lines
1.3 KiB
Rust
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),
|
|
}
|
|
}
|
|
}
|