Skip to main content

luaur_bytecode/methods/
bytecode_builder_get_string_table.rs

1use crate::records::bytecode_builder::BytecodeBuilder;
2use alloc::vec::Vec;
3use luaur_common::macros::luau_assert::LUAU_ASSERT;
4
5impl BytecodeBuilder {
6    pub fn get_string_table(&self) -> Vec<&str> {
7        let table_len = self.string_table.size();
8        let mut strings: Vec<&str> = Vec::with_capacity(table_len);
9        unsafe {
10            strings.set_len(table_len);
11        }
12
13        for (string_ref, &index) in self.string_table.iter() {
14            LUAU_ASSERT!(index > 0 && (index as usize) <= strings.len());
15            let data = unsafe {
16                core::slice::from_raw_parts(string_ref.data as *const u8, string_ref.length)
17            };
18            strings[index as usize - 1] = core::str::from_utf8(data).unwrap_or("");
19        }
20        strings
21    }
22}