Simplify creating TableLitElem

This commit is contained in:
Joscha 2022-11-22 16:35:16 +01:00
parent 45caafdc38
commit c191486864
5 changed files with 29 additions and 45 deletions

View file

@ -144,6 +144,18 @@ impl HasSpan for TableLitElem {
} }
} }
impl TableLitElem {
pub fn named(name: Ident, value: Box<Expr>, span: Span) -> Self {
Self::Named {
name,
s0: Space::empty(span),
s1: Space::empty(span),
value,
span,
}
}
}
/// `'{ a, foo: b }` /// `'{ a, foo: b }`
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct TableLit(pub BoundedSeparated<TableLitElem>); pub struct TableLit(pub BoundedSeparated<TableLitElem>);

View file

@ -13,23 +13,9 @@ impl Call {
s2: _, s2: _,
span, 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) let new = BoundedSeparated::new(span)
.then(call) .then(TableLitElem::named(Ident::new("call", span), expr, span))
.then(arg) .then(TableLitElem::named(Ident::new("arg", span), arg, span))
.table_lit() .table_lit()
.lit() .lit()
.expr(); .expr();

View file

@ -14,13 +14,7 @@ impl FuncDef {
span, span,
} => { } => {
let quote = BoundedSeparated::new(span) let quote = BoundedSeparated::new(span)
.then(TableLitElem::Named { .then(TableLitElem::named(Ident::new("quote", span), body, span))
name: Ident::new("quote", span),
s0: Space::empty(span),
s1: Space::empty(span),
value: body,
span,
})
.table_lit(); .table_lit();
let quote = quote.lit().expr().boxed(); let quote = quote.lit().expr().boxed();
let scope = Call::NoArg { let scope = Call::NoArg {
@ -31,13 +25,11 @@ impl FuncDef {
}; };
let new = BoundedSeparated::new(span) let new = BoundedSeparated::new(span)
.then(TableConstrElem::Lit(TableLitElem::Positional(quote))) .then(TableConstrElem::Lit(TableLitElem::Positional(quote)))
.then(TableConstrElem::Lit(TableLitElem::Named { .then(TableConstrElem::Lit(TableLitElem::named(
name: Ident::new("scope", span), Ident::new("scope", span),
s0: Space::empty(span), scope.expr().boxed(),
s1: Space::empty(span),
value: scope.expr().boxed(),
span, span,
})) )))
.table_constr() .table_constr()
.expr(); .expr();
(new, true) (new, true)

View file

@ -1,6 +1,5 @@
use crate::ast::{ use crate::ast::{
BoundedSeparated, Expr, Field, Ident, Line, Lit, Space, TableConstr, TableConstrElem, BoundedSeparated, Expr, Field, Ident, Line, TableConstr, TableConstrElem, TableLitElem,
TableLitElem,
}; };
use crate::span::HasSpan; use crate::span::HasSpan;
@ -21,15 +20,12 @@ impl TableConstr {
} => Err((s0, index, s1, s2, s3, value, span)), } => 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) 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() .table_lit()
.lit() .lit()
.expr(); .expr();

View file

@ -46,13 +46,11 @@ impl TableDestr {
))) )))
.then(TableConstrElem::Lit(TableLitElem::Positional(value))); .then(TableConstrElem::Lit(TableLitElem::Positional(value)));
if local.is_some() { if local.is_some() {
constr = constr.then(TableConstrElem::Lit(TableLitElem::Named { constr = constr.then(TableConstrElem::Lit(TableLitElem::named(
name: Ident::new("local", span), Ident::new("local", span),
s0: Space::empty(span), Lit::Bool(true, span).expr().boxed(),
s1: Space::empty(span),
value: Lit::Bool(true, span).expr().boxed(),
span, span,
})); )));
} }
let new = Call::Constr { let new = Call::Constr {