Skip to main content

luaur_analysis/methods/
cfg_builder_lower_expr_control_flow_graph.rs

1use crate::records::cfg_builder::CfgBuilder;
2use luaur_ast::records::ast_expr::AstExpr;
3use luaur_ast::records::ast_expr_binary::AstExprBinary;
4use luaur_ast::records::ast_expr_local::AstExprLocal;
5use luaur_ast::records::ast_node::AstNode;
6use luaur_ast::rtti::ast_node_as;
7use luaur_common::macros::luau_assert::LUAU_ASSERT;
8
9impl CfgBuilder {
10    pub fn lower_expr_ast_expr(&mut self, expr: *mut AstExpr) {
11        unsafe {
12            let local = ast_node_as::<AstExprLocal>(expr as *mut AstNode);
13            if !local.is_null() {
14                self.lower_expr_ast_expr_local(local);
15            } else {
16                let binop = ast_node_as::<AstExprBinary>(expr as *mut AstNode);
17                if !binop.is_null() {
18                    LUAU_ASSERT!(!(*binop).left.is_null());
19                    LUAU_ASSERT!(!(*binop).right.is_null());
20                    self.lower_expr_ast_expr((*binop).left);
21                    self.lower_expr_ast_expr((*binop).right);
22                }
23            }
24        }
25    }
26}