diff --git a/src/ast/lit.rs b/src/ast/lit.rs index 091c82a..d3c69cd 100644 --- a/src/ast/lit.rs +++ b/src/ast/lit.rs @@ -53,6 +53,12 @@ impl HasSpan for NumLit { } } +impl NumLit { + pub fn lit(self) -> Lit { + Lit::Num(self) + } +} + #[derive(Clone)] pub enum StringLitElem { /// Normal unescaped characters @@ -100,6 +106,10 @@ impl StringLit { span: ident.span, } } + + pub fn lit(self) -> Lit { + Lit::String(self) + } } impl HasSpan for StringLit { @@ -144,6 +154,12 @@ impl HasSpan for TableLit { } } +impl TableLit { + pub fn lit(self) -> Lit { + Lit::Table(self) + } +} + #[derive(Clone)] pub enum Lit { /// `nil` diff --git a/src/desugar/call.rs b/src/desugar/call.rs index 162036b..4a84fcf 100644 --- a/src/desugar/call.rs +++ b/src/desugar/call.rs @@ -27,8 +27,12 @@ impl Call { value: arg, span, }; - let new = - Lit::Table(BoundedSeparated::new(span).then(call).then(arg).table_lit()).expr(); + let new = BoundedSeparated::new(span) + .then(call) + .then(arg) + .table_lit() + .lit() + .expr(); (new, true) } diff --git a/src/desugar/field.rs b/src/desugar/field.rs index cc7f601..f66a482 100644 --- a/src/desugar/field.rs +++ b/src/desugar/field.rs @@ -65,7 +65,7 @@ impl Field { expr, s0, s1, - index: Lit::String(StringLit::from_ident(ident)).expr().boxed(), + index: StringLit::from_ident(ident).lit().expr().boxed(), s2: Space::empty(span), span, }; @@ -88,7 +88,7 @@ impl Field { expr, s0, s1, - index: Lit::String(StringLit::from_ident(ident)).expr().boxed(), + index: StringLit::from_ident(ident).lit().expr().boxed(), s2: Space::empty(span), s3: s2, s4: s3, diff --git a/src/desugar/func_def.rs b/src/desugar/func_def.rs index fd2a6bc..ecbb1b4 100644 --- a/src/desugar/func_def.rs +++ b/src/desugar/func_def.rs @@ -22,7 +22,7 @@ impl FuncDef { span, }) .table_lit(); - let quote = Lit::Table(quote).expr().boxed(); + let quote = quote.lit().expr().boxed(); let scope = Call::NoArg { expr: Lit::Builtin(Builtin::Scope, span).expr().boxed(), s0: Space::empty(span), @@ -76,7 +76,7 @@ impl FuncDef { s0: Space::empty(span), s1: Space::empty(span), s2: Space::empty(span), - body: Lit::Table(body).expr().boxed(), + body: body.lit().expr().boxed(), span, }; (new.expr(), true) diff --git a/src/desugar/program.rs b/src/desugar/program.rs index d972273..615998b 100644 --- a/src/desugar/program.rs +++ b/src/desugar/program.rs @@ -1,4 +1,4 @@ -use crate::ast::{Expr, Lit, Program, Space}; +use crate::ast::{Program, Space}; impl Program { pub fn desugar(self) -> (Self, bool) { @@ -14,7 +14,7 @@ impl Program { // -> `s0 table` let new = Self::Expr { s0, - expr: Lit::Table(elems.table_lit()).expr(), + expr: elems.table_lit().lit().expr(), s1: Space::empty(span), span, }; diff --git a/src/desugar/table_constr.rs b/src/desugar/table_constr.rs index f74c432..8fa183d 100644 --- a/src/desugar/table_constr.rs +++ b/src/desugar/table_constr.rs @@ -25,10 +25,14 @@ impl TableConstr { name: Ident::new("raw", span), s0: Space::empty(span), s1: Space::empty(span), - value: Lit::Table(elems.table_lit()).expr().boxed(), + value: elems.table_lit().lit().expr().boxed(), span, }; - let mut expr = Lit::Table(BoundedSeparated::new(span).then(raw_elem).table_lit()).expr(); + let mut expr = BoundedSeparated::new(span) + .then(raw_elem) + .table_lit() + .lit() + .expr(); // `sl [ s0 index s1 ] s2 = s3 value sr` // -> `expr s0 [ s1 index s2 ] s3 = s4 s5 value` diff --git a/src/desugar/table_destr.rs b/src/desugar/table_destr.rs index c07c400..cbd053b 100644 --- a/src/desugar/table_destr.rs +++ b/src/desugar/table_destr.rs @@ -9,7 +9,7 @@ fn pattern_to_constr(pattern: TablePattern) -> TableConstr { .0 .map(|e| match e { TablePatternElem::Positional(ident) => TableConstrElem::Lit(TableLitElem::Positional( - Lit::String(StringLit::from_ident(ident)).expr().boxed(), + StringLit::from_ident(ident).lit().expr().boxed(), )), TablePatternElem::Named { @@ -22,7 +22,7 @@ fn pattern_to_constr(pattern: TablePattern) -> TableConstr { name, s0, s1, - value: Lit::String(StringLit::from_ident(ident)).expr().boxed(), + value: StringLit::from_ident(ident).lit().expr().boxed(), span, }), }) diff --git a/src/desugar/var.rs b/src/desugar/var.rs index b77aa34..ffad828 100644 --- a/src/desugar/var.rs +++ b/src/desugar/var.rs @@ -102,7 +102,7 @@ impl Var { let span = name.span(); let new = Self::Access { s0: Space::empty(span), - index: Lit::String(StringLit::from_ident(name)).expr().boxed(), + index: StringLit::from_ident(name).lit().expr().boxed(), s1: Space::empty(span), span, }; @@ -122,7 +122,7 @@ impl Var { let new = Self::Assign { local, s0: Space::empty(span), - index: Lit::String(StringLit::from_ident(name)).expr().boxed(), + index: StringLit::from_ident(name).lit().expr().boxed(), s1: Space::empty(span), s2: s0, s3: s1,