Simplify creating TableLitElem
This commit is contained in:
parent
45caafdc38
commit
c191486864
5 changed files with 29 additions and 45 deletions
|
|
@ -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>);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue