Skip to main content

luaur_analysis/methods/
stringifier_state_get_name_to_string.rs

1//! Node: `cxx:Method:Luau.Analysis:Analysis/src/ToString.cpp:209:stringifier_state_get_name`
2//! Source: `Analysis/src/ToString.cpp:209-227` (hand-ported)
3
4use crate::functions::generate_name::generate_name;
5use crate::records::stringifier_state::StringifierState;
6use crate::type_aliases::type_id::TypeId;
7use alloc::string::String;
8
9impl StringifierState {
10    /// C++ `std::string getName(TypeId ty)`.
11    pub fn get_name_type_id(&mut self, ty: TypeId) -> String {
12        unsafe {
13            let opts = &mut *self.opts;
14            let s = opts.name_map.types.size();
15            // std::string& n = opts.nameMap.types[ty]; (default-constructs)
16            {
17                let n = opts.name_map.types.get_or_insert(ty);
18                if !n.is_empty() {
19                    return n.clone();
20                }
21            }
22
23            for count in 0..256usize {
24                let candidate = generate_name(self.used_names.size() + count);
25                if !self.used_names.contains(&candidate) {
26                    self.used_names.insert(candidate.clone());
27                    *opts.name_map.types.get_or_insert(ty) = candidate.clone();
28                    return candidate;
29                }
30            }
31
32            generate_name(s)
33        }
34    }
35}