Desugar literals
This commit is contained in:
parent
8278442d3f
commit
52c1aeba35
4 changed files with 62 additions and 3 deletions
|
|
@ -1,3 +1,4 @@
|
|||
mod basic;
|
||||
mod expr;
|
||||
mod lit;
|
||||
mod program;
|
||||
|
|
|
|||
|
|
@ -3,10 +3,14 @@ use crate::ast::Expr;
|
|||
impl Expr {
|
||||
pub fn desugar(self) -> (Self, bool) {
|
||||
match self {
|
||||
Self::Lit(lit) => (Self::Lit(lit), false), // TODO Implement
|
||||
Self::Lit(lit) => {
|
||||
let (lit, desugared) = lit.desugar();
|
||||
(Self::Lit(lit), desugared)
|
||||
}
|
||||
|
||||
Self::Call(call) => (Self::Call(call), false), // TODO Implement
|
||||
Self::Field(field) => (Self::Field(field), false), // TODO Implement
|
||||
Self::Var(var) => (Self::Var(var), false), // TODO Implement
|
||||
Self::Var(var) => (Self::Var(var), false), // TODO Implement
|
||||
Self::TableConstr(constr) => (Self::TableConstr(constr), false), // TODO Implement
|
||||
Self::TableDestr(destr) => (Self::TableDestr(destr), false), // TODO Implement
|
||||
Self::FuncDef(def) => (Self::FuncDef(def), false), // TODO Implement
|
||||
|
|
|
|||
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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@ impl Program {
|
|||
s2,
|
||||
span,
|
||||
} => {
|
||||
let (elems, desugared) = elems.desugar_elem(|e| (e, false)); // TODO Implement
|
||||
let (elems, desugared) = elems.desugar_elem(|e| e.desugar());
|
||||
if desugared {
|
||||
let new = Self::Module {
|
||||
s0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue