luaur_analysis/methods/
normalizer_subtract_primitive.rs1use 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}