diff options
| author | Henry <mail@henrygressmann.de> | 2026-03-25 23:41:50 +0100 |
|---|---|---|
| committer | Henry <mail@henrygressmann.de> | 2026-03-25 23:41:50 +0100 |
| commit | 430ea402911855e8b8579f0e97b10699f22f758d (patch) | |
| tree | 681f2ec35c497b0d9d686c8438f5c240ddeb535b /crates/parser/src/module.rs | |
| parent | 9d19098154714d5196a803e7f098105690decbbd (diff) | |
chore: atomic module data
Signed-off-by: Henry <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src/module.rs')
| -rw-r--r-- | crates/parser/src/module.rs | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/crates/parser/src/module.rs b/crates/parser/src/module.rs index 4754d31..d498143 100644 --- a/crates/parser/src/module.rs +++ b/crates/parser/src/module.rs @@ -1,14 +1,15 @@ use crate::log::debug; use crate::{ParseError, Result, conversion}; use alloc::string::ToString; -use alloc::{boxed::Box, format, vec::Vec}; +use alloc::sync::Arc; +use alloc::{format, vec::Vec}; use tinywasm_types::{ - Data, Element, Export, FuncType, Global, Import, Instruction, MemoryType, TableType, TinyWasmModule, ValueCounts, - ValueCountsSmall, WasmFunction, WasmFunctionData, + ArcSlice, Data, Element, Export, FuncType, Global, Import, Instruction, MemoryType, TableType, TinyWasmModule, + ValueCounts, ValueCountsSmall, WasmFunction, WasmFunctionData, }; use wasmparser::{FuncValidatorAllocations, Payload, Validator}; -pub(crate) type Code = (Box<[Instruction]>, WasmFunctionData, ValueCounts); +pub(crate) type Code = (Arc<[Instruction]>, WasmFunctionData, ValueCounts); #[derive(Default)] pub(crate) struct ModuleReader { @@ -195,25 +196,24 @@ impl ModuleReader { .map(|((instructions, data, locals), ty_idx)| { let ty = self.func_types.get(ty_idx as usize).expect("No func type for func, this is a bug").clone(); let params = ValueCountsSmall::from(&ty.params); - WasmFunction { instructions, data, locals, params, ty } + WasmFunction { instructions: ArcSlice(instructions), data, locals, params, ty } }) - .collect::<Vec<_>>() - .into_boxed_slice(); + .collect::<Vec<_>>(); let globals = self.globals; let table_types = self.table_types; Ok(TinyWasmModule { - funcs, - func_types: self.func_types.into_boxed_slice(), - globals: globals.into_boxed_slice(), - table_types: table_types.into_boxed_slice(), - imports: self.imports.into_boxed_slice(), + funcs: funcs.into(), + func_types: self.func_types.into(), + globals: globals.into(), + table_types: table_types.into(), + imports: self.imports.into(), start_func: self.start_func, - data: self.data.into_boxed_slice(), - exports: self.exports.into_boxed_slice(), - elements: self.elements.into_boxed_slice(), - memory_types: self.memory_types.into_boxed_slice(), + data: self.data.into(), + exports: self.exports.into(), + elements: self.elements.into(), + memory_types: self.memory_types.into(), }) } } |
