luaur_compiler/methods/
compiler_compile_expr_side.rs1use crate::records::compiler::Compiler;
2use crate::records::reg_scope::RegScope;
3use luaur_ast::records::ast_expr::AstExpr;
4use luaur_ast::records::ast_expr_call::AstExprCall;
5use luaur_ast::records::ast_expr_function::AstExprFunction;
6use luaur_ast::records::ast_expr_global::AstExprGlobal;
7use luaur_ast::records::ast_expr_local::AstExprLocal;
8use luaur_ast::records::ast_expr_varargs::AstExprVarargs;
9use luaur_ast::rtti;
10
11impl Compiler {
12 pub fn compile_expr_side(&mut self, node: *mut AstExpr) {
13 unsafe {
14 let ast_node = &*(node as *mut luaur_ast::records::ast_node::AstNode);
15 if rtti::ast_node_is::<AstExprLocal>(ast_node)
16 || rtti::ast_node_is::<AstExprGlobal>(ast_node)
17 || rtti::ast_node_is::<AstExprVarargs>(ast_node)
18 || rtti::ast_node_is::<AstExprFunction>(ast_node)
19 || self.is_constant(node)
20 {
21 return;
22 }
23
24 if rtti::ast_node_as::<AstExprCall>(node as *mut luaur_ast::records::ast_node::AstNode)
25 .is_null()
26 {
27 (*self.bytecode)
28 .add_debug_remark(format_args!("expression only compiled for side effects"));
29 }
30
31 let mut rsi = self.reg_scope_compiler();
32 self.compile_expr_auto(node, &mut rsi);
33 }
34 }
35}