From 8278442d3f726609d6d57c5e773cd01dd56b2dd2 Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 21 Nov 2022 11:43:31 +0100 Subject: [PATCH] Expand expression desugaring --- src/desugar.rs | 1 + src/desugar/expr.rs | 79 ++++++++++++++++++++++++++++++++++++++++++ src/desugar/program.rs | 2 +- 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/desugar/expr.rs diff --git a/src/desugar.rs b/src/desugar.rs index 4fe06c6..f29ec0e 100644 --- a/src/desugar.rs +++ b/src/desugar.rs @@ -1,2 +1,3 @@ mod basic; +mod expr; mod program; diff --git a/src/desugar/expr.rs b/src/desugar/expr.rs new file mode 100644 index 0000000..7390148 --- /dev/null +++ b/src/desugar/expr.rs @@ -0,0 +1,79 @@ +use crate::ast::Expr; + +impl Expr { + pub fn desugar(self) -> (Self, bool) { + match self { + Self::Lit(lit) => (Self::Lit(lit), false), // TODO Implement + 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::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 + + Self::Paren { + s0, + inner, + s1, + span, + } => ( + Self::Paren { + s0, + inner, + s1, + span, + }, + false, + ), // TODO Implement + + Self::Neg { + minus, + s0, + expr, + span, + } => ( + Self::Neg { + minus, + s0, + expr, + span, + }, + false, + ), // TODO Implement + + Self::Not { + not, + s0, + expr, + span, + } => ( + Self::Not { + not, + s0, + expr, + span, + }, + false, + ), // TODO Implement + + Self::BinOp { + left, + s0, + op, + s1, + right, + span, + } => ( + Self::BinOp { + left, + s0, + op, + s1, + right, + span, + }, + false, + ), // TODO Implement + } + } +} diff --git a/src/desugar/program.rs b/src/desugar/program.rs index a1ef50e..17f9d79 100644 --- a/src/desugar/program.rs +++ b/src/desugar/program.rs @@ -5,7 +5,7 @@ impl Program { pub fn desugar(self) -> (Self, bool) { match self { Self::Expr { s0, expr, s1, span } => { - let (expr, desugared) = (expr, false); // TODO Implement + let (expr, desugared) = expr.desugar(); (Self::Expr { s0, expr, s1, span }, desugared) }