about summary refs log tree commit diff
path: root/src/parse/ast/expression.rs
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-10-23 22:01:52 +0200
committerMel <einebeere@gmail.com>2021-10-23 22:01:52 +0200
commit8a6eb35a900081967db16d313ab7ed470de6570f (patch)
treed58dd702d8a742c7554545bc4e291480649e3663 /src/parse/ast/expression.rs
parentda14afd74e1659af6ce4553360ac5dd0ce933db8 (diff)
downloadrabbithole-8a6eb35a900081967db16d313ab7ed470de6570f.tar.zst
rabbithole-8a6eb35a900081967db16d313ab7ed470de6570f.zip
Loop expressions and concrete walker errors.
Diffstat (limited to 'src/parse/ast/expression.rs')
-rw-r--r--src/parse/ast/expression.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/parse/ast/expression.rs b/src/parse/ast/expression.rs
index 1749c40..c7f6d9b 100644
--- a/src/parse/ast/expression.rs
+++ b/src/parse/ast/expression.rs
@@ -1,6 +1,8 @@
 use std::fmt::{self, Display, Formatter};
 
-use super::nodes::{BinaryOperator, BlockNode, FnNode, Identifier, IfNode, Literal, UnaryOperator};
+use super::nodes::{
+    BinaryOperator, BlockNode, FnNode, Identifier, IfNode, Literal, LoopNode, UnaryOperator,
+};
 
 #[derive(Debug, Clone)]
 pub enum Expression {
@@ -17,6 +19,7 @@ pub enum Expression {
     Block(Box<BlockNode>),
     Fn(Box<FnNode>),
     If(Box<IfNode>),
+    Loop(Box<LoopNode>),
     Literal(Literal),
     Identifier(Identifier),
 }
@@ -97,6 +100,16 @@ impl Expression {
                     Self::block_fmt(f, e, depth + 1)?;
                 }
             }
+            Expression::Loop(node) => {
+                writeln!(f, "{}Loop:", pad)?;
+                if let Some(loop_condition) = &node.condition {
+                    writeln!(f, "{}- Condition:", pad)?;
+                    loop_condition.nested_fmt(f, depth + 1)?;
+                }
+
+                writeln!(f, "{}- Body:", pad)?;
+                Self::block_fmt(f, &node.body, depth + 1)?;
+            }
         }
 
         Ok(())