Skip to main content

luaur_analysis/methods/
normalizer_within_resource_limits.rs

1use crate::records::normalizer::Normalizer;
2use luaur_common::FInt;
3
4impl Normalizer {
5    pub fn within_resource_limits(&mut self) -> bool {
6        // If cache is too large, clear it
7        if FInt::LuauNormalizeCacheLimit.get() > 0 {
8            let cache_usage = self.cached_normals.len()
9                + self.cached_intersections.len()
10                + self.cached_unions.len()
11                + self.cached_type_ids.len()
12                + self.cached_is_inhabited.size()
13                + self.cached_is_inhabited_intersection.size();
14            if cache_usage > FInt::LuauNormalizeCacheLimit.get() as usize {
15                self.clear_caches();
16                return false;
17            }
18        }
19
20        // Check the recursion count
21        if unsafe { (*self.shared_state).counters.recursion_limit } > 0 {
22            if unsafe { (*self.shared_state).counters.recursion_limit }
23                < unsafe { (*self.shared_state).counters.recursion_count }
24            {
25                return false;
26            }
27        }
28
29        true
30    }
31}