mini_builder_rs/evaluator/
block.rs1use crate::{parser::expression::Expression, tokenizer::token::TokenType};
2
3pub type Blocks<'a, 'b> = Vec<Box<Block<'a, 'b>>>;
4
5#[derive(Debug)]
8pub enum Block<'a, 'b> {
9 Source(&'b str),
10 Expression(&'a Expression<'b>),
11 Assignment(&'b str, TokenType, &'a Expression<'b>),
12 If(Box<IfBlock<'a, 'b>>),
13 For(Box<ForBlock<'a, 'b>>),
14}
15
16#[derive(Debug)]
18pub struct IfBlock<'a, 'b> {
19 pub if_blocks: Vec<(&'a Expression<'b>, Blocks<'a, 'b>)>,
20 pub else_blocks: Option<Blocks<'a, 'b>>,
21}
22
23impl<'a, 'b> IfBlock<'a, 'b> {
24 pub fn new(
25 if_blocks: Vec<(&'a Expression<'b>, Blocks<'a, 'b>)>,
26 else_blocks: Option<Blocks<'a, 'b>>,
27 ) -> Self {
28 Self {
29 if_blocks,
30 else_blocks,
31 }
32 }
33}
34
35#[derive(Debug)]
37pub struct ForBlock<'a, 'b> {
38 pub var_name: &'b str,
39 pub expression: &'a Expression<'b>,
40 pub blocks: Blocks<'a, 'b>,
41}
42
43impl<'a, 'b> ForBlock<'a, 'b> {
44 pub fn new(var_name: &'b str, expression: &'a Expression<'b>, blocks: Blocks<'a, 'b>) -> Self {
45 Self {
46 var_name,
47 expression,
48 blocks,
49 }
50 }
51}