Skip to main content

luaur_analysis/methods/
cfg_builder_lower_control_flow_graph.rs

1use crate::records::cfg_builder::CfgBuilder;
2use luaur_ast::records::ast_stat::AstStat;
3use luaur_ast::records::ast_stat_assign::AstStatAssign;
4use luaur_ast::records::ast_stat_block::AstStatBlock;
5use luaur_ast::records::ast_stat_if::AstStatIf;
6use luaur_ast::records::ast_stat_local::AstStatLocal;
7use luaur_ast::records::ast_stat_while::AstStatWhile;
8use luaur_common::macros::luau_assert::LUAU_ASSERT;
9
10impl CfgBuilder {
11    pub fn lower_ast_stat(&mut self, statement: *mut AstStat) {
12        unsafe {
13            let p = statement as *mut luaur_ast::records::ast_node::AstNode;
14
15            if (*p).is::<AstStatBlock>() {
16                self.lower_ast_stat_block(statement as *mut AstStatBlock);
17            } else if (*p).is::<AstStatLocal>() {
18                self.lower_ast_stat_local(statement as *mut AstStatLocal);
19            } else if (*p).is::<AstStatAssign>() {
20                self.lower_ast_stat_assign(statement as *mut AstStatAssign);
21            } else if (*p).is::<AstStatIf>() {
22                self.lower_ast_stat_if(statement as *mut AstStatIf);
23            } else if (*p).is::<AstStatWhile>() {
24                self.lower_ast_stat_while(statement as *mut AstStatWhile);
25            } else {
26                LUAU_ASSERT!(false);
27            }
28        }
29    }
30}