gbf_core/decompiler/ast/
array_kind.rs

1#![deny(missing_docs)]
2
3use gbf_macros::AstNodeTransform;
4use serde::{Deserialize, Serialize};
5
6use super::{
7    AstKind, AstVisitable, array_node::ArrayNode, expr::ExprKind, phi_array::PhiArrayNode, ptr::P,
8    visitors::AstVisitor,
9};
10
11#[derive(Debug, Clone, Serialize, Deserialize, Eq, AstNodeTransform)]
12#[convert_to(AstKind::Expression, ExprKind::Array)]
13/// Represents the kind of an array node in the AST.
14pub enum ArrayKind {
15    /// Represents an UnmergedArray
16    PhiArray(P<PhiArrayNode>),
17    /// Represents a MergedArray
18    MergedArray(P<ArrayNode>),
19}
20
21impl AstVisitable for ArrayKind {
22    fn accept<V: AstVisitor>(&self, visitor: &mut V) -> V::Output {
23        visitor.visit_array(self)
24    }
25}
26
27impl PartialEq for ArrayKind {
28    fn eq(&self, other: &Self) -> bool {
29        match (self, other) {
30            (ArrayKind::PhiArray(p1), ArrayKind::PhiArray(p2)) => p1 == p2,
31            (ArrayKind::MergedArray(a1), ArrayKind::MergedArray(a2)) => a1 == a2,
32            _ => false,
33        }
34    }
35}