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-24 02:03:29 +0200
committerMel <einebeere@gmail.com>2021-10-24 02:03:29 +0200
commit73c4808c44f75b7d6546f00f70779fcbf8e28754 (patch)
treef44e26fad3f37e62c0f5a35e2fafbe2d20f6da55 /src/parse/ast/expression.rs
parent249abe9c33dfd08afa6b09f3e53be91b0f445561 (diff)
downloadrabbithole-73c4808c44f75b7d6546f00f70779fcbf8e28754.tar.zst
rabbithole-73c4808c44f75b7d6546f00f70779fcbf8e28754.zip
Postfix parsing
Diffstat (limited to 'src/parse/ast/expression.rs')
-rw-r--r--src/parse/ast/expression.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/parse/ast/expression.rs b/src/parse/ast/expression.rs
index c7f6d9b..1eec69d 100644
--- a/src/parse/ast/expression.rs
+++ b/src/parse/ast/expression.rs
@@ -1,7 +1,8 @@
 use std::fmt::{self, Display, Formatter};
 
 use super::nodes::{
-    BinaryOperator, BlockNode, FnNode, Identifier, IfNode, Literal, LoopNode, UnaryOperator,
+    ArrayAccessNode, BinaryOperator, BlockNode, CallNode, FnNode, Identifier, IfNode, Literal,
+    LoopNode, MemberAccessNode, UnaryOperator,
 };
 
 #[derive(Debug, Clone)]
@@ -15,6 +16,9 @@ pub enum Expression {
         op: UnaryOperator,
         right: Box<Expression>,
     },
+    Call(Box<CallNode>),
+    ArrayAccess(Box<ArrayAccessNode>),
+    MemberAccess(Box<MemberAccessNode>),
     Group(Box<Expression>),
     Block(Box<BlockNode>),
     Fn(Box<FnNode>),
@@ -48,6 +52,28 @@ impl Expression {
                 writeln!(f, "{}- Right:", pad)?;
                 right.nested_fmt(f, depth + 1)?;
             }
+            Expression::Call(node) => {
+                writeln!(f, "{}Function Call:", pad)?;
+                writeln!(f, "{}- Called:", pad)?;
+                node.called.nested_fmt(f, depth + 1)?;
+                for (i, e) in node.arguments.iter().enumerate() {
+                    writeln!(f, "{}- Argument {}:", pad, i)?;
+                    e.nested_fmt(f, depth + 1)?;
+                }
+            }
+            Expression::ArrayAccess(node) => {
+                writeln!(f, "{}Array Access:", pad)?;
+                writeln!(f, "{}- Array:", pad)?;
+                node.array.nested_fmt(f, depth + 1)?;
+                writeln!(f, "{}- Index:", pad)?;
+                node.index.nested_fmt(f, depth + 1)?;
+            }
+            Expression::MemberAccess(node) => {
+                writeln!(f, "{}Member Access:", pad)?;
+                writeln!(f, "{}- Object:", pad)?;
+                node.object.nested_fmt(f, depth + 1)?;
+                writeln!(f, "{}- Member Name: {}", pad, node.member_name)?;
+            }
             Expression::Group(node) => {
                 writeln!(f, "{}Group:", pad)?;
                 node.nested_fmt(f, depth + 1)?;