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 }`
#[derive(Debug, Clone)]
pub struct TableLit(pub BoundedSeparated<TableLitElem>);

View file

@ -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();

View file

@ -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)

View file

@ -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();

View file

@ -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 {