luaur_analysis/methods/
mapped_generic_environment_push_frame.rs1use crate::records::mapped_generic_environment::MappedGenericEnvironment;
2use crate::type_aliases::type_pack_id::TypePackId;
3use luaur_common::records::dense_hash_map::DenseHashMap;
4use luaur_common::records::dense_hash_set::DenseHashSet;
5
6impl MappedGenericEnvironment {
7 pub fn push_frame(&mut self, generic_tps: &Vec<TypePackId>) {
8 let mut mappings: DenseHashMap<TypePackId, Option<TypePackId>> =
9 DenseHashMap::new(core::ptr::null());
10 for &tp in generic_tps.iter() {
11 *mappings.get_or_insert(tp) = None;
12 }
13 let parent_scope_index = self.current_scope_index;
14 let frame = crate::records::mapped_generic_frame::MappedGenericFrame {
15 mappings,
16 parent_scope_index,
17 children: DenseHashSet::new(0),
18 };
19 self.frames.push(frame);
20 let new_frame_index = self.frames.len() - 1;
21 if let Some(current_scope_index) = self.current_scope_index {
22 self.frames[current_scope_index]
23 .children
24 .insert(new_frame_index);
25 }
26 self.current_scope_index = Some(new_frame_index);
27 }
28}