luaur_analysis/methods/
data_flow_graph_builder_resolve_captures.rs1use crate::functions::collect_operands::collect_operands;
2use crate::functions::get_def::get_def_id;
3use crate::records::data_flow_graph_builder::DataFlowGraphBuilder;
4use crate::records::phi::Phi;
5use crate::type_aliases::def_id_def::DefId;
6use alloc::vec::Vec;
7use luaur_common::macros::luau_assert::LUAU_ASSERT;
8
9impl DataFlowGraphBuilder {
10 pub fn resolve_captures(&mut self) {
11 for (_symbol, capture) in self.captures.iter() {
12 let mut operands: Vec<DefId> = Vec::new();
13 for i in capture.version_offset..capture.all_versions.len() {
14 collect_operands(capture.all_versions[i], &mut operands);
15 }
16
17 for capture_def in &capture.capture_defs {
18 let phi_ptr = get_def_id::<Phi>(*capture_def) as *mut Phi;
19 LUAU_ASSERT!(!phi_ptr.is_null());
20 unsafe {
21 LUAU_ASSERT!((*phi_ptr).operands.is_empty());
22 (*phi_ptr).operands = operands.clone();
23 }
24 }
25 }
26 }
27}