Skip to main content

luaur_analysis/methods/
quantifier_visit_quantify_alt_c.rs

1use crate::enums::polarity::Polarity;
2use crate::functions::as_mutable_type_pack::as_mutable_type_pack_id;
3use crate::records::free_type_pack::FreeTypePack;
4use crate::records::generic_type_pack::GenericTypePack;
5use crate::records::quantifier::Quantifier;
6use crate::records::type_pack_var::TypePackVar;
7use crate::type_aliases::type_pack_id::TypePackId;
8
9impl Quantifier {
10    pub fn visit_type_pack_id_free_type_pack(
11        &mut self,
12        tp: TypePackId,
13        ftp: &FreeTypePack,
14    ) -> bool {
15        self.seen_mutable_type = true;
16
17        if !self.level.subsumes(&ftp.level) {
18            return false;
19        }
20
21        // *asMutable(tp) = GenericTypePack{level};
22        let mut gtp = GenericTypePack {
23            index: 0,
24            level: Default::default(),
25            scope: core::ptr::null_mut(),
26            name: Default::default(),
27            explicitName: false,
28            polarity: Polarity::None,
29        };
30        gtp.generic_type_pack_type_level(self.level);
31
32        unsafe {
33            *as_mutable_type_pack_id(tp) = TypePackVar::from(gtp);
34        }
35
36        self.generic_packs.push(tp);
37        true
38    }
39}