xenon_codegen/
scope.rs

1use core::fmt;
2
3use crate::statement::Statement;
4
5/// Defines a scope
6#[derive(Debug, Clone, Default)]
7pub struct Scope {
8    pub items: Vec<Statement>,
9}
10impl Scope {
11    pub fn new() -> Scope {
12        Scope { items: vec![] }
13    }
14
15    pub fn is_valid(&self) -> bool {
16        for i in 0..self.items.len() {
17            if !self.items[i].is_valid() {
18                return false;
19            }
20        }
21
22        true
23    }
24}
25impl fmt::Display for Scope {
26    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27        match writeln!(fmt, "{{") {
28            Ok(_) => (),
29            Err(e) => return Err(e),
30        }
31        for i in 0..self.items.len() {
32            match write!(fmt, "{}", self.items[i]) {
33                Ok(_) => (),
34                Err(e) => return Err(e),
35            }
36        }
37        match write!(fmt, "}}") {
38            Ok(_) => (),
39            Err(e) => return Err(e),
40        }
41
42        Ok(())
43    }
44}