Skip to main content

luaur_analysis/methods/
mapped_generic_environment_push_frame.rs

1use 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}