From 98ac2e8f26ff4d90c37bb9c9536e9eb14e31efb4 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 14 Nov 2021 19:31:48 +0100 Subject: Parse and walk str embeds. --- src/parse/ast/expression.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/parse/ast/expression.rs') diff --git a/src/parse/ast/expression.rs b/src/parse/ast/expression.rs index b2b9678..d119a71 100644 --- a/src/parse/ast/expression.rs +++ b/src/parse/ast/expression.rs @@ -1,8 +1,10 @@ use std::fmt::{self, Display, Formatter}; +use crate::parse::ast::nodes::StrPart; + use super::nodes::{ ArrayAccessNode, ArrayNode, BinaryOperator, BlockNode, CallNode, FnNode, Identifier, IfNode, - LoopNode, MemberAccessNode, SimpleLiteral, UnaryOperator, + LoopNode, MemberAccessNode, SimpleLiteral, StrNode, UnaryOperator, }; #[derive(Debug, Clone)] @@ -23,6 +25,7 @@ pub enum Expression { Block(Box), If(Box), Loop(Box), + StrLiteral(Box), FnLiteral(Box), ArrayLiteral(ArrayNode), SimpleLiteral(SimpleLiteral), @@ -82,6 +85,18 @@ impl Expression { Expression::Block(block) => { Self::block_fmt(f, block, depth + 1)?; } + Expression::StrLiteral(node) => { + writeln!(f, "{}Str:", pad)?; + for (i, statement) in node.parts.iter().enumerate() { + writeln!(f, "{}- {}:", pad, i)?; + match statement { + StrPart::Literal(literal) => { + writeln!(f, "{}{}", " ".repeat(depth + 1), literal.clone()) + } + StrPart::Embed(block) => block.nested_fmt(f, depth + 1), + }?; + } + } Expression::FnLiteral(node) => { write!(f, "{}Fn (", pad)?; -- cgit 1.4.1