gbf_core/decompiler/ast/visitors/
mod.rs1#![deny(missing_docs)]
2
3use super::{
4 AstKind, array_access::ArrayAccessNode, array_kind::ArrayKind, array_node::ArrayNode,
5 assignment::AssignmentNode, bin_op::BinaryOperationNode, block::BlockNode,
6 control_flow::ControlFlowNode, expr::ExprKind, func_call::FunctionCallNode,
7 function::FunctionNode, identifier::IdentifierNode, literal::LiteralNode,
8 member_access::MemberAccessNode, phi::PhiNode, ptr::P, ret::ReturnNode,
9 statement::StatementKind, unary_op::UnaryOperationNode,
10};
11
12pub mod emit_context;
14pub mod emitter;
16
17pub trait AstVisitor {
19 type Output;
21
22 fn visit_node(&mut self, node: &AstKind) -> Self::Output;
24 fn visit_statement(&mut self, node: &StatementKind) -> Self::Output;
26 fn visit_assignment(&mut self, node: &P<AssignmentNode>) -> Self::Output;
28 fn visit_expr(&mut self, node: &ExprKind) -> Self::Output;
30 fn visit_bin_op(&mut self, node: &P<BinaryOperationNode>) -> Self::Output;
32 fn visit_unary_op(&mut self, node: &P<UnaryOperationNode>) -> Self::Output;
34 fn visit_identifier(&mut self, node: &P<IdentifierNode>) -> Self::Output;
36 fn visit_literal(&mut self, node: &P<LiteralNode>) -> Self::Output;
38 fn visit_member_access(&mut self, node: &P<MemberAccessNode>) -> Self::Output;
40 fn visit_function_call(&mut self, node: &P<FunctionCallNode>) -> Self::Output;
42 fn visit_array(&mut self, node: &ArrayKind) -> Self::Output;
44 fn visit_array_node(&mut self, node: &P<ArrayNode>) -> Self::Output;
46 fn visit_phi_array(
48 &mut self,
49 node: &P<crate::decompiler::ast::phi_array::PhiArrayNode>,
50 ) -> Self::Output;
51 fn visit_array_access(&mut self, node: &P<ArrayAccessNode>) -> Self::Output;
53 fn visit_function(&mut self, node: &P<FunctionNode>) -> Self::Output;
55 fn visit_return(&mut self, node: &P<ReturnNode>) -> Self::Output;
57 fn visit_block(&mut self, node: &P<BlockNode>) -> Self::Output;
59 fn visit_control_flow(&mut self, node: &P<ControlFlowNode>) -> Self::Output;
61 fn visit_phi(&mut self, node: &P<PhiNode>) -> Self::Output;
63 fn visit_new(&mut self, node: &P<crate::decompiler::ast::new::NewNode>) -> Self::Output;
65 fn visit_new_array(
67 &mut self,
68 node: &P<crate::decompiler::ast::new_array::NewArrayNode>,
69 ) -> Self::Output;
70 fn visit_virtual_branch(
72 &mut self,
73 node: &P<crate::decompiler::ast::vbranch::VirtualBranchNode>,
74 ) -> Self::Output;
75 fn visit_range(&mut self, node: &P<crate::decompiler::ast::range::RangeNode>) -> Self::Output;
77}