Add desugar command and desugar programs

This commit is contained in:
Joscha 2022-11-21 09:32:07 +01:00
parent 6eee1ba930
commit 8b21acac9e
6 changed files with 106 additions and 12 deletions

48
src/desugar/program.rs Normal file
View file

@ -0,0 +1,48 @@
use crate::ast::{Expr, Lit, Program, Space, TableLit};
use crate::span::HasSpan;
impl Program {
pub fn desugar(self) -> (Self, bool) {
match self {
Self::Expr { s0, expr, s1, span } => {
let (expr, desugared) = (expr, false); // TODO Implement
(Self::Expr { s0, expr, s1, span }, desugared)
}
Self::Module {
s0,
s1,
elems,
s2,
span,
} => {
let (elems, desugared) = (elems, false); // TODO Implement
if desugared {
let new = Self::Module {
s0,
s1,
elems,
s2,
span,
};
(new, true)
} else {
let elems_span = elems.span();
let table = TableLit {
s0: s1,
elems,
s1: Space::empty(elems_span.at_end()),
span: elems_span,
};
let new = Self::Expr {
s0,
expr: Expr::Lit(Lit::Table(table)),
s1: s2,
span,
};
(new, true)
}
}
}
}
}