From 621ea8f1d418b4b48644c49c54c2e81f29d674ff Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 21 Nov 2022 14:38:45 +0100 Subject: [PATCH] Desugar field access via ident --- src/desugar/field.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/desugar/field.rs b/src/desugar/field.rs index 8a8b9c2..be46da3 100644 --- a/src/desugar/field.rs +++ b/src/desugar/field.rs @@ -1,5 +1,6 @@ use crate::ast::{ - Call, Expr, Field, Line, Lit, Separated, Space, TableConstr, TableConstrElem, TableLitElem, + Call, Expr, Field, Line, Lit, Separated, Space, StringLit, StringLitElem, TableConstr, + TableConstrElem, TableLitElem, }; use crate::builtin::Builtin; @@ -90,14 +91,21 @@ impl Field { ident, span, } => { - let new = Expr::Field(Self::AccessIdent { + // `expr s0 . s1 ident´ + // -> `expr s0 [ s1 ident_str ]` + let ident_str = Expr::Lit(Lit::String(StringLit { + elems: vec![StringLitElem::Plain(ident.name)], + span, + })); + let new = Expr::Field(Self::Access { expr, s0, s1, - ident, + index: Box::new(ident_str), + s2: Space::empty(span), span, }); - (new, false) // TODO Implement + (new, true) } Self::AssignIdent {