luaur_analysis/functions/
assert_invariant.rs1use crate::functions::are_normalized_extern_types::are_normalized_extern_types;
2use crate::functions::are_normalized_functions::are_normalized_functions;
3use crate::functions::are_normalized_tables::are_normalized_tables;
4use crate::functions::is_normalized_boolean::is_normalized_boolean;
5use crate::functions::is_normalized_buffer::is_normalized_buffer;
6use crate::functions::is_normalized_error::is_normalized_error;
7use crate::functions::is_normalized_integer::is_normalized_integer;
8use crate::functions::is_normalized_nil::is_normalized_nil;
9use crate::functions::is_normalized_number::is_normalized_number;
10use crate::functions::is_normalized_string::is_normalized_string;
11use crate::functions::is_normalized_thread::is_normalized_thread;
12use crate::functions::is_normalized_top::is_normalized_top;
13use crate::functions::is_normalized_tyvar::is_normalized_tyvar;
14use crate::records::normalized_type::NormalizedType;
15use luaur_common::macros::luau_assert::LUAU_ASSERT;
16
17pub(crate) fn assert_invariant(norm: &NormalizedType) {
18 if !luaur_common::FFlag::DebugLuauCheckNormalizeInvariant.get() {
19 return;
20 }
21
22 LUAU_ASSERT!(is_normalized_top(norm.tops));
23 LUAU_ASSERT!(is_normalized_boolean(norm.booleans));
24 LUAU_ASSERT!(are_normalized_extern_types(&norm.extern_types));
25 LUAU_ASSERT!(is_normalized_error(norm.errors));
26 LUAU_ASSERT!(is_normalized_nil(norm.nils));
27 LUAU_ASSERT!(is_normalized_number(norm.numbers));
28 if luaur_common::FFlag::LuauIntegerType2.get() {
29 LUAU_ASSERT!(is_normalized_integer(norm.integers));
30 }
31 LUAU_ASSERT!(is_normalized_string(&norm.strings));
32 LUAU_ASSERT!(is_normalized_thread(norm.threads));
33 LUAU_ASSERT!(is_normalized_buffer(norm.buffers));
34 LUAU_ASSERT!(are_normalized_functions(&norm.functions));
35 LUAU_ASSERT!(are_normalized_tables(&norm.tables));
36 LUAU_ASSERT!(is_normalized_tyvar(&norm.tyvars));
37 for child in norm.tyvars.values() {
38 assert_invariant(child);
39 }
40}