luaur_analysis/methods/
normalizer_is_inhabited_normalize.rs1use crate::enums::normalization_result::NormalizationResult;
2use crate::records::fuel_initializer::FuelInitializer;
3use crate::records::normalized_type::NormalizedType;
4use crate::records::normalizer::Normalizer;
5use crate::records::normalizer_hit_limits::NormalizerHitLimits;
6use crate::type_aliases::type_id::TypeId;
7use luaur_common::records::dense_hash_set::DenseHashSet;
8
9impl Normalizer {
10 pub fn is_inhabited_normalized_type(&mut self, norm: &NormalizedType) -> NormalizationResult {
11 match std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
12 let mut seen: DenseHashSet<TypeId> = DenseHashSet::new(core::ptr::null_mut());
13
14 let mut fi = FuelInitializer {
15 normalizer: self as *mut Normalizer,
16 initialized_fuel: false,
17 };
18 fi.fuel_initializer_not_null_normalizer(self as *mut Normalizer);
19 let _fi = fi;
20
21 self.is_inhabited_normalized_type_set_type_id(norm, &mut seen)
22 })) {
23 Ok(result) => result,
24 Err(payload) if payload.downcast_ref::<NormalizerHitLimits>().is_some() => {
25 NormalizationResult::HitLimits
26 }
27 Err(payload) => std::panic::resume_unwind(payload),
28 }
29 }
30}