Skip to main content

luaur_analysis/functions/
assert_invariant.rs

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