ruka_codegen_wasm/codegen/wasm/
literals.rs1use std::collections::BTreeMap;
2
3use ruka_mir::{MirInstr, MirProgram};
4
5pub(crate) fn collect_string_literals(
7 program: &MirProgram,
8) -> (Vec<String>, BTreeMap<String, u32>) {
9 let mut literals = Vec::<String>::new();
10 let mut handles = BTreeMap::<String, u32>::new();
11 for (_, function) in program.functions.iter() {
12 for block in function.blocks.values() {
13 for instr in &block.instrs {
14 if let MirInstr::ConstString { value, .. } = instr
15 && !handles.contains_key(value)
16 {
17 let handle = literals.len() as u32;
18 literals.push(value.clone());
19 handles.insert(value.clone(), handle);
20 }
21 }
22 }
23 }
24 (literals, handles)
25}