From e621f13a226d297d5368f4c294a8549a93843934 Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 14 Dec 2021 00:08:13 +0100 Subject: AST restructure --- src/parse/ast/statement.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/parse/ast/statement.rs') 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), @@ -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)?; } } -- cgit 1.4.1