Simplify creating string literal from ident

This commit is contained in:
Joscha 2022-11-22 10:31:58 +01:00
parent af6c171eb4
commit d4797c5894
3 changed files with 17 additions and 24 deletions

View file

@ -93,6 +93,15 @@ pub struct StringLit {
pub span: Span, pub span: Span,
} }
impl StringLit {
pub fn from_ident(ident: Ident) -> Self {
Self {
elems: vec![StringLitElem::Plain(ident.name)],
span: ident.span,
}
}
}
impl HasSpan for StringLit { impl HasSpan for StringLit {
fn span(&self) -> Span { fn span(&self) -> Span {
self.span self.span

View file

@ -1,6 +1,6 @@
use crate::ast::{ use crate::ast::{
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, StringLitElem, TableConstr, BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, TableConstr, TableConstrElem,
TableConstrElem, TableLitElem, TableLitElem,
}; };
use crate::builtin::Builtin; use crate::builtin::Builtin;
@ -94,15 +94,11 @@ impl Field {
} => { } => {
// `expr s0 . s1 ident´ // `expr s0 . s1 ident´
// -> `expr s0 [ s1 ident_str ]` // -> `expr s0 [ s1 ident_str ]`
let ident_str = Expr::Lit(Lit::String(StringLit {
elems: vec![StringLitElem::Plain(ident.name)],
span: ident.span,
}));
let new = Expr::Field(Self::Access { let new = Expr::Field(Self::Access {
expr, expr,
s0, s0,
s1, s1,
index: Box::new(ident_str), index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(ident)))),
s2: Space::empty(span), s2: Space::empty(span),
span, span,
}); });
@ -121,15 +117,11 @@ impl Field {
} => { } => {
// `expr s0 . s1 ident s2 = s3 value` // `expr s0 . s1 ident s2 = s3 value`
// -> `expr s0 [ s1 ident_str ] s2 = s3 value` // -> `expr s0 [ s1 ident_str ] s2 = s3 value`
let ident_str = Expr::Lit(Lit::String(StringLit {
elems: vec![StringLitElem::Plain(ident.name)],
span: ident.span,
}));
let new = Expr::Field(Self::Assign { let new = Expr::Field(Self::Assign {
expr, expr,
s0, s0,
s1, s1,
index: Box::new(ident_str), index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(ident)))),
s2: Space::empty(span), s2: Space::empty(span),
s3: s2, s3: s2,
s4: s3, s4: s3,

View file

@ -1,6 +1,6 @@
use crate::ast::{ use crate::ast::{
BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, StringLitElem, TableConstr, BoundedSeparated, Call, Expr, Field, Line, Lit, Space, StringLit, TableConstr, TableConstrElem,
TableConstrElem, TableLitElem, Var, TableLitElem, Var,
}; };
use crate::builtin::Builtin; use crate::builtin::Builtin;
use crate::span::HasSpan; use crate::span::HasSpan;
@ -117,13 +117,9 @@ impl Var {
// `name` // `name`
// -> `[ name_str ]` // -> `[ name_str ]`
let span = name.span(); let span = name.span();
let name_str = Expr::Lit(Lit::String(StringLit {
elems: vec![StringLitElem::Plain(name.name)],
span,
}));
let new = Expr::Var(Self::Access { let new = Expr::Var(Self::Access {
s0: Space::empty(span), s0: Space::empty(span),
index: Box::new(name_str), index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(name)))),
s1: Space::empty(span), s1: Space::empty(span),
span, span,
}); });
@ -140,14 +136,10 @@ impl Var {
} => { } => {
// `local name s0 = s1 value` // `local name s0 = s1 value`
// -> `local [ name_str ] s0 = s1 value` // -> `local [ name_str ] s0 = s1 value`
let name_str = Expr::Lit(Lit::String(StringLit {
elems: vec![StringLitElem::Plain(name.name)],
span: name.span,
}));
let new = Expr::Var(Self::Assign { let new = Expr::Var(Self::Assign {
local, local,
s0: Space::empty(span), s0: Space::empty(span),
index: Box::new(name_str), index: Box::new(Expr::Lit(Lit::String(StringLit::from_ident(name)))),
s1: Space::empty(span), s1: Space::empty(span),
s2: s0, s2: s0,
s3: s1, s3: s1,