diff options
| author | Mel <einebeere@gmail.com> | 2021-12-14 00:08:13 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2021-12-28 21:46:39 +0100 |
| commit | e621f13a226d297d5368f4c294a8549a93843934 (patch) | |
| tree | 4079d2bb1a9f08e8411395e4d0ba8c87f063980c /src/parse/ast/statement.rs | |
| parent | 9d331e92045ca9098ab5f2139c80ea33e89e8ca3 (diff) | |
| download | rabbithole-e621f13a226d297d5368f4c294a8549a93843934.tar.zst rabbithole-e621f13a226d297d5368f4c294a8549a93843934.zip | |
AST restructure
Diffstat (limited to 'src/parse/ast/statement.rs')
| -rw-r--r-- | src/parse/ast/statement.rs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/parse/ast/statement.rs b/src/parse/ast/statement.rs index 99ee0e0..7eb9978 100644 --- a/src/parse/ast/statement.rs +++ b/src/parse/ast/statement.rs @@ -1,9 +1,17 @@ use std::fmt::Display; +use crate::lex::token::Location; + use super::expression::Expression; #[derive(Debug, Clone)] -pub enum Statement { +pub struct Statement { + pub at: Location, + pub kind: StatementKind, +} + +#[derive(Debug, Clone)] +pub enum StatementKind { Expression(Expression), Print(Expression), Break(Option<Expression>), @@ -24,17 +32,17 @@ impl Statement { depth: usize, ) -> std::fmt::Result { let pad = " ".repeat(depth); - match self { - Statement::Expression(expression) => expression.nested_fmt(f, depth)?, - Statement::Print(expression) => { + match self.kind { + StatementKind::Expression(expression) => expression.nested_fmt(f, depth)?, + StatementKind::Print(expression) => { writeln!(f, "{}Print:", pad)?; expression.nested_fmt(f, depth + 1)?; } - Statement::Return(expression) => { + StatementKind::Return(expression) => { writeln!(f, "{}Return:", pad)?; expression.nested_fmt(f, depth + 1)?; } - Statement::Break(expression) => { + StatementKind::Break(expression) => { if let Some(returned_on_break) = expression { writeln!(f, "{}Break:", pad)?; returned_on_break.nested_fmt(f, depth + 1)?; @@ -42,7 +50,7 @@ impl Statement { writeln!(f, "{}Break", pad)?; } } - Statement::Continue => { + StatementKind::Continue => { writeln!(f, "{}Continue", pad)?; } } |
