diff options
Diffstat (limited to 'crates/parser')
| -rw-r--r-- | crates/parser/src/module.rs | 32 | ||||
| -rw-r--r-- | crates/parser/src/visit.rs | 6 |
2 files changed, 19 insertions, 19 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(), }) } } diff --git a/crates/parser/src/visit.rs b/crates/parser/src/visit.rs index 9b9ab75..8212763 100644 --- a/crates/parser/src/visit.rs +++ b/crates/parser/src/visit.rs @@ -2,7 +2,7 @@ use crate::Result; use crate::conversion::{convert_heaptype, convert_valtype}; use alloc::string::ToString; -use alloc::{boxed::Box, vec::Vec}; +use alloc::vec::Vec; use tinywasm_types::{Instruction, MemoryArg, WasmFunctionData}; use wasmparser::{ FuncValidator, FuncValidatorAllocations, FunctionBody, VisitOperator, VisitSimdOperator, WasmModuleResources, @@ -37,7 +37,7 @@ pub(crate) fn process_operators_and_validate<R: WasmModuleResources>( validator: FuncValidator<R>, body: FunctionBody<'_>, local_addr_map: Vec<u32>, -) -> Result<(Box<[Instruction]>, WasmFunctionData, FuncValidatorAllocations)> { +) -> Result<(alloc::sync::Arc<[Instruction]>, WasmFunctionData, FuncValidatorAllocations)> { let mut reader = body.get_operators_reader()?; let remaining = reader.get_binary_reader().bytes_remaining(); let mut builder = FunctionBuilder::new(remaining, validator, local_addr_map); @@ -52,7 +52,7 @@ pub(crate) fn process_operators_and_validate<R: WasmModuleResources>( } Ok(( - builder.instructions.into_boxed_slice(), + alloc::sync::Arc::from(builder.instructions), WasmFunctionData { v128_constants: builder.v128_constants.into_boxed_slice() }, builder.validator.into_allocations(), )) |
