gbf_core/decompiler/ast/
statement.rs1#![deny(missing_docs)]
2
3use gbf_macros::AstNodeTransform;
4use serde::{Deserialize, Serialize};
5
6use super::{
7 AstKind, AstVisitable, assignment::AssignmentNode, ptr::P, ret::ReturnNode,
8 vbranch::VirtualBranchNode, visitors::AstVisitor,
9};
10
11#[derive(Debug, Clone, Serialize, Deserialize, Eq, AstNodeTransform)]
13#[convert_to(AstKind::Statement)]
14pub enum StatementKind {
15 Assignment(P<AssignmentNode>),
17 Return(P<ReturnNode>),
19 VirtualBranch(P<VirtualBranchNode>),
21}
22
23impl AstVisitable for StatementKind {
24 fn accept<V: AstVisitor>(&self, visitor: &mut V) -> V::Output {
25 visitor.visit_statement(self)
26 }
27}
28
29impl PartialEq for StatementKind {
32 fn eq(&self, other: &Self) -> bool {
33 match (self, other) {
34 (StatementKind::Assignment(a1), StatementKind::Assignment(a2)) => a1 == a2,
35 (StatementKind::Return(r1), StatementKind::Return(r2)) => r1 == r2,
36 (StatementKind::VirtualBranch(v1), StatementKind::VirtualBranch(v2)) => v1 == v2,
37 _ => false,
38 }
39 }
40}