microcad_lang/syntax/statement/
assignment_statement.rs1use std::rc::Rc;
7
8use microcad_lang_base::{SrcRef, SrcReferrer, TreeDisplay, TreeState};
9
10use crate::syntax::*;
11
12#[derive(Clone)]
14pub struct AssignmentStatement {
15 pub attribute_list: AttributeList,
17 pub assignment: Rc<Assignment>,
19 pub src_ref: SrcRef,
21}
22
23impl SrcReferrer for AssignmentStatement {
24 fn src_ref(&self) -> SrcRef {
25 self.src_ref.clone()
26 }
27}
28
29impl TreeDisplay for AssignmentStatement {
30 fn tree_print(&self, f: &mut std::fmt::Formatter, depth: TreeState) -> std::fmt::Result {
31 writeln!(f, "{:depth$}Assignment {}", "", self.assignment)
32 }
33}
34
35impl std::fmt::Display for AssignmentStatement {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 if !self.attribute_list.is_empty() {
38 write!(f, "{} ", self.attribute_list)?;
39 }
40 write!(f, "{};", self.assignment)
41 }
42}
43
44impl std::fmt::Debug for AssignmentStatement {
45 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46 if !self.attribute_list.is_empty() {
47 write!(f, "{:?} ", self.attribute_list)?;
48 }
49 write!(f, "{:?};", self.assignment)
50 }
51}