From c191486864add7a349db221c7a433a67b1b35637 Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 22 Nov 2022 16:35:16 +0100 Subject: [PATCH] Simplify creating TableLitElem --- src/ast/lit.rs | 12 ++++++++++++ src/desugar/call.rs | 18 ++---------------- src/desugar/func_def.rs | 18 +++++------------- src/desugar/table_constr.rs | 16 ++++++---------- src/desugar/table_destr.rs | 10 ++++------ 5 files changed, 29 insertions(+), 45 deletions(-) diff --git a/src/ast/lit.rs b/src/ast/lit.rs index d3c69cd..44df7ac 100644 --- a/src/ast/lit.rs +++ b/src/ast/lit.rs @@ -144,6 +144,18 @@ impl HasSpan for TableLitElem { } } +impl TableLitElem { + pub fn named(name: Ident, value: Box, span: Span) -> Self { + Self::Named { + name, + s0: Space::empty(span), + s1: Space::empty(span), + value, + span, + } + } +} + /// `'{ a, foo: b }` #[derive(Debug, Clone)] pub struct TableLit(pub BoundedSeparated); diff --git a/src/desugar/call.rs b/src/desugar/call.rs index 4a84fcf..b5155d1 100644 --- a/src/desugar/call.rs +++ b/src/desugar/call.rs @@ -13,23 +13,9 @@ impl Call { s2: _, span, } => { - let call = TableLitElem::Named { - name: Ident::new("call", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: expr, - span, - }; - let arg = TableLitElem::Named { - name: Ident::new("arg", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: arg, - span, - }; let new = BoundedSeparated::new(span) - .then(call) - .then(arg) + .then(TableLitElem::named(Ident::new("call", span), expr, span)) + .then(TableLitElem::named(Ident::new("arg", span), arg, span)) .table_lit() .lit() .expr(); diff --git a/src/desugar/func_def.rs b/src/desugar/func_def.rs index ecbb1b4..86e3ad8 100644 --- a/src/desugar/func_def.rs +++ b/src/desugar/func_def.rs @@ -14,13 +14,7 @@ impl FuncDef { span, } => { let quote = BoundedSeparated::new(span) - .then(TableLitElem::Named { - name: Ident::new("quote", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: body, - span, - }) + .then(TableLitElem::named(Ident::new("quote", span), body, span)) .table_lit(); let quote = quote.lit().expr().boxed(); let scope = Call::NoArg { @@ -31,13 +25,11 @@ impl FuncDef { }; let new = BoundedSeparated::new(span) .then(TableConstrElem::Lit(TableLitElem::Positional(quote))) - .then(TableConstrElem::Lit(TableLitElem::Named { - name: Ident::new("scope", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: scope.expr().boxed(), + .then(TableConstrElem::Lit(TableLitElem::named( + Ident::new("scope", span), + scope.expr().boxed(), span, - })) + ))) .table_constr() .expr(); (new, true) diff --git a/src/desugar/table_constr.rs b/src/desugar/table_constr.rs index 8fa183d..cfa1c04 100644 --- a/src/desugar/table_constr.rs +++ b/src/desugar/table_constr.rs @@ -1,6 +1,5 @@ use crate::ast::{ - BoundedSeparated, Expr, Field, Ident, Line, Lit, Space, TableConstr, TableConstrElem, - TableLitElem, + BoundedSeparated, Expr, Field, Ident, Line, TableConstr, TableConstrElem, TableLitElem, }; use crate::span::HasSpan; @@ -21,15 +20,12 @@ impl TableConstr { } => Err((s0, index, s1, s2, s3, value, span)), }); - let raw_elem = TableLitElem::Named { - name: Ident::new("raw", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: elems.table_lit().lit().expr().boxed(), - span, - }; let mut expr = BoundedSeparated::new(span) - .then(raw_elem) + .then(TableLitElem::named( + Ident::new("raw", span), + elems.table_lit().lit().expr().boxed(), + span, + )) .table_lit() .lit() .expr(); diff --git a/src/desugar/table_destr.rs b/src/desugar/table_destr.rs index cbd053b..fb1e070 100644 --- a/src/desugar/table_destr.rs +++ b/src/desugar/table_destr.rs @@ -46,13 +46,11 @@ impl TableDestr { ))) .then(TableConstrElem::Lit(TableLitElem::Positional(value))); if local.is_some() { - constr = constr.then(TableConstrElem::Lit(TableLitElem::Named { - name: Ident::new("local", span), - s0: Space::empty(span), - s1: Space::empty(span), - value: Lit::Bool(true, span).expr().boxed(), + constr = constr.then(TableConstrElem::Lit(TableLitElem::named( + Ident::new("local", span), + Lit::Bool(true, span).expr().boxed(), span, - })); + ))); } let new = Call::Constr {