Skip to main content

luaur_analysis/methods/
normalizer_subtract_primitive.rs

1use crate::records::normalized_type::NormalizedType;
2use crate::records::normalizer::Normalizer;
3use crate::type_aliases::type_id::TypeId;
4
5impl Normalizer {
6    pub fn subtract_primitive(&mut self, here: &mut NormalizedType, ty: TypeId) {
7        self.consume_fuel();
8
9        let ty_followed = unsafe { crate::functions::follow_type::follow_type_id(ty) };
10        let ptv = unsafe {
11            crate::functions::get_type_alt_j::get_type_id::<
12                crate::records::primitive_type::PrimitiveType,
13            >(ty_followed)
14        };
15        luaur_common::macros::luau_assert::LUAU_ASSERT!(!ptv.is_null());
16
17        let builtin_types = here.builtin_types;
18        let ptv_ref = unsafe { &*ptv };
19        match ptv_ref.r#type {
20            crate::records::primitive_type::Type::NilType => {
21                here.nils = unsafe { (*builtin_types).neverType };
22            }
23            crate::records::primitive_type::Type::Boolean => {
24                here.booleans = unsafe { (*builtin_types).neverType };
25            }
26            crate::records::primitive_type::Type::Number => {
27                here.numbers = unsafe { (*builtin_types).neverType };
28            }
29            crate::records::primitive_type::Type::Integer => {
30                here.integers = unsafe { (*builtin_types).neverType };
31            }
32            crate::records::primitive_type::Type::String => {
33                here.strings.reset_to_never();
34            }
35            crate::records::primitive_type::Type::Thread => {
36                here.threads = unsafe { (*builtin_types).neverType };
37            }
38            crate::records::primitive_type::Type::Buffer => {
39                here.buffers = unsafe { (*builtin_types).neverType };
40            }
41            crate::records::primitive_type::Type::Function => {
42                here.functions.reset_to_never();
43            }
44            crate::records::primitive_type::Type::Table => {
45                here.tables.clear();
46            }
47        }
48    }
49}