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 basic;
|
||||||
mod expr;
|
mod expr;
|
||||||
|
mod lit;
|
||||||
mod program;
|
mod program;
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,14 @@ use crate::ast::Expr;
|
||||||
impl Expr {
|
impl Expr {
|
||||||
pub fn desugar(self) -> (Self, bool) {
|
pub fn desugar(self) -> (Self, bool) {
|
||||||
match self {
|
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::Call(call) => (Self::Call(call), false), // TODO Implement
|
||||||
Self::Field(field) => (Self::Field(field), 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::TableConstr(constr) => (Self::TableConstr(constr), false), // TODO Implement
|
||||||
Self::TableDestr(destr) => (Self::TableDestr(destr), false), // TODO Implement
|
Self::TableDestr(destr) => (Self::TableDestr(destr), false), // TODO Implement
|
||||||
Self::FuncDef(def) => (Self::FuncDef(def), 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,
|
s2,
|
||||||
span,
|
span,
|
||||||
} => {
|
} => {
|
||||||
let (elems, desugared) = elems.desugar_elem(|e| (e, false)); // TODO Implement
|
let (elems, desugared) = elems.desugar_elem(|e| e.desugar());
|
||||||
if desugared {
|
if desugared {
|
||||||
let new = Self::Module {
|
let new = Self::Module {
|
||||||
s0,
|
s0,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue