Skip to main content

luaur_compiler/methods/
table_mutation_tracker_visit_constant_folding.rs

1use crate::records::table_mutation_tracker::TableMutationTracker;
2use luaur_ast::records::ast_array::AstArray;
3use luaur_ast::records::ast_expr::AstExpr;
4use luaur_ast::records::ast_expr_call::AstExprCall;
5
6impl<'a> TableMutationTracker<'a> {
7    pub fn visit_ast_expr_call(&mut self, node: *mut AstExprCall) -> bool {
8        unsafe {
9            if node.is_null() {
10                return false;
11            }
12
13            let call_node = &mut *node;
14
15            // Values passed in as arguments can escape
16            for arg_ptr in call_node.args.as_slice() {
17                self.mark_escaped_impl(*arg_ptr);
18            }
19
20            // Table indexed in a self call escapes through 'self'
21            if call_node.self_ {
22                self.mark_escaped_table_index(call_node.func, false);
23            }
24        }
25
26        true
27    }
28}