Simplify creating Lit
This commit is contained in:
parent
fafc567447
commit
45caafdc38
8 changed files with 38 additions and 14 deletions
|
|
@ -53,6 +53,12 @@ impl HasSpan for NumLit {
|
|||
}
|
||||
}
|
||||
|
||||
impl NumLit {
|
||||
pub fn lit(self) -> Lit {
|
||||
Lit::Num(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum StringLitElem {
|
||||
/// Normal unescaped characters
|
||||
|
|
@ -100,6 +106,10 @@ impl StringLit {
|
|||
span: ident.span,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn lit(self) -> Lit {
|
||||
Lit::String(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl HasSpan for StringLit {
|
||||
|
|
@ -144,6 +154,12 @@ impl HasSpan for TableLit {
|
|||
}
|
||||
}
|
||||
|
||||
impl TableLit {
|
||||
pub fn lit(self) -> Lit {
|
||||
Lit::Table(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum Lit {
|
||||
/// `nil`
|
||||
|
|
|
|||
|
|
@ -27,8 +27,12 @@ impl Call {
|
|||
value: arg,
|
||||
span,
|
||||
};
|
||||
let new =
|
||||
Lit::Table(BoundedSeparated::new(span).then(call).then(arg).table_lit()).expr();
|
||||
let new = BoundedSeparated::new(span)
|
||||
.then(call)
|
||||
.then(arg)
|
||||
.table_lit()
|
||||
.lit()
|
||||
.expr();
|
||||
(new, true)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ impl Field {
|
|||
expr,
|
||||
s0,
|
||||
s1,
|
||||
index: Lit::String(StringLit::from_ident(ident)).expr().boxed(),
|
||||
index: StringLit::from_ident(ident).lit().expr().boxed(),
|
||||
s2: Space::empty(span),
|
||||
span,
|
||||
};
|
||||
|
|
@ -88,7 +88,7 @@ impl Field {
|
|||
expr,
|
||||
s0,
|
||||
s1,
|
||||
index: Lit::String(StringLit::from_ident(ident)).expr().boxed(),
|
||||
index: StringLit::from_ident(ident).lit().expr().boxed(),
|
||||
s2: Space::empty(span),
|
||||
s3: s2,
|
||||
s4: s3,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ impl FuncDef {
|
|||
span,
|
||||
})
|
||||
.table_lit();
|
||||
let quote = Lit::Table(quote).expr().boxed();
|
||||
let quote = quote.lit().expr().boxed();
|
||||
let scope = Call::NoArg {
|
||||
expr: Lit::Builtin(Builtin::Scope, span).expr().boxed(),
|
||||
s0: Space::empty(span),
|
||||
|
|
@ -76,7 +76,7 @@ impl FuncDef {
|
|||
s0: Space::empty(span),
|
||||
s1: Space::empty(span),
|
||||
s2: Space::empty(span),
|
||||
body: Lit::Table(body).expr().boxed(),
|
||||
body: body.lit().expr().boxed(),
|
||||
span,
|
||||
};
|
||||
(new.expr(), true)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use crate::ast::{Expr, Lit, Program, Space};
|
||||
use crate::ast::{Program, Space};
|
||||
|
||||
impl Program {
|
||||
pub fn desugar(self) -> (Self, bool) {
|
||||
|
|
@ -14,7 +14,7 @@ impl Program {
|
|||
// -> `s0 table`
|
||||
let new = Self::Expr {
|
||||
s0,
|
||||
expr: Lit::Table(elems.table_lit()).expr(),
|
||||
expr: elems.table_lit().lit().expr(),
|
||||
s1: Space::empty(span),
|
||||
span,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -25,10 +25,14 @@ impl TableConstr {
|
|||
name: Ident::new("raw", span),
|
||||
s0: Space::empty(span),
|
||||
s1: Space::empty(span),
|
||||
value: Lit::Table(elems.table_lit()).expr().boxed(),
|
||||
value: elems.table_lit().lit().expr().boxed(),
|
||||
span,
|
||||
};
|
||||
let mut expr = Lit::Table(BoundedSeparated::new(span).then(raw_elem).table_lit()).expr();
|
||||
let mut expr = BoundedSeparated::new(span)
|
||||
.then(raw_elem)
|
||||
.table_lit()
|
||||
.lit()
|
||||
.expr();
|
||||
|
||||
// `sl [ s0 index s1 ] s2 = s3 value sr`
|
||||
// -> `expr s0 [ s1 index s2 ] s3 = s4 s5 value`
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ fn pattern_to_constr(pattern: TablePattern) -> TableConstr {
|
|||
.0
|
||||
.map(|e| match e {
|
||||
TablePatternElem::Positional(ident) => TableConstrElem::Lit(TableLitElem::Positional(
|
||||
Lit::String(StringLit::from_ident(ident)).expr().boxed(),
|
||||
StringLit::from_ident(ident).lit().expr().boxed(),
|
||||
)),
|
||||
|
||||
TablePatternElem::Named {
|
||||
|
|
@ -22,7 +22,7 @@ fn pattern_to_constr(pattern: TablePattern) -> TableConstr {
|
|||
name,
|
||||
s0,
|
||||
s1,
|
||||
value: Lit::String(StringLit::from_ident(ident)).expr().boxed(),
|
||||
value: StringLit::from_ident(ident).lit().expr().boxed(),
|
||||
span,
|
||||
}),
|
||||
})
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ impl Var {
|
|||
let span = name.span();
|
||||
let new = Self::Access {
|
||||
s0: Space::empty(span),
|
||||
index: Lit::String(StringLit::from_ident(name)).expr().boxed(),
|
||||
index: StringLit::from_ident(name).lit().expr().boxed(),
|
||||
s1: Space::empty(span),
|
||||
span,
|
||||
};
|
||||
|
|
@ -122,7 +122,7 @@ impl Var {
|
|||
let new = Self::Assign {
|
||||
local,
|
||||
s0: Space::empty(span),
|
||||
index: Lit::String(StringLit::from_ident(name)).expr().boxed(),
|
||||
index: StringLit::from_ident(name).lit().expr().boxed(),
|
||||
s1: Space::empty(span),
|
||||
s2: s0,
|
||||
s3: s1,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue