Desugar literals
This commit is contained in:
parent
8278442d3f
commit
52c1aeba35
4 changed files with 62 additions and 3 deletions
54
src/desugar/lit.rs
Normal file
54
src/desugar/lit.rs
Normal 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),
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue