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 }`
|
/// `'{ a, foo: b }`
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct TableLit(pub BoundedSeparated<TableLitElem>);
|
pub struct TableLit(pub BoundedSeparated<TableLitElem>);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue