Add desugar command and desugar programs
This commit is contained in:
parent
6eee1ba930
commit
8b21acac9e
6 changed files with 106 additions and 12 deletions
48
src/desugar/program.rs
Normal file
48
src/desugar/program.rs
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue