diff --git a/lib/api/src/js/externals/memory.rs b/lib/api/src/js/externals/memory.rs index 306379c1c..d7c9460d3 100644 --- a/lib/api/src/js/externals/memory.rs +++ b/lib/api/src/js/externals/memory.rs @@ -82,6 +82,9 @@ pub struct Memory { view: js_sys::Uint8Array, } +unsafe impl Send for Memory {} +unsafe impl Sync for Memory {} + impl Memory { /// Creates a new host `Memory` from the provided [`MemoryType`]. /// @@ -234,8 +237,9 @@ impl Memory { Ok(Pages(new_pages)) } - #[cfg(test)] - pub(crate) fn uint8view(&self) -> js_sys::Uint8Array { + /// Used by tests + #[doc(hidden)] + pub fn uint8view(&self) -> js_sys::Uint8Array { self.view.clone() } diff --git a/lib/api/src/js/mem_access.rs b/lib/api/src/js/mem_access.rs index 8a89a4d9c..98c98d2a2 100644 --- a/lib/api/src/js/mem_access.rs +++ b/lib/api/src/js/mem_access.rs @@ -1,10 +1,7 @@ use crate::RuntimeError; -use wasmer_types::ValueType; - use crate::{Memory, Memory32, Memory64, WasmPtr}; use std::{ convert::TryInto, - error::Error, fmt, marker::PhantomData, mem::{self, MaybeUninit}, @@ -12,31 +9,24 @@ use std::{ slice, string::FromUtf8Error, }; +use thiserror::Error; +use wasmer_types::ValueType; /// Error for invalid [`Memory`] access. -#[derive(Debug)] +#[derive(Clone, Copy, Debug, Error)] #[non_exhaustive] pub enum MemoryAccessError { /// Memory access is outside heap bounds. + #[error("memory access out of bounds")] HeapOutOfBounds, /// Address calculation overflow. + #[error("address calculation overflow")] Overflow, /// String is not valid UTF-8. + #[error("string is not valid utf-8")] NonUtf8String, } -impl fmt::Display for MemoryAccessError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - MemoryAccessError::HeapOutOfBounds => write!(f, "memory access out of bounds"), - MemoryAccessError::Overflow => write!(f, "address calculation overflow"), - MemoryAccessError::NonUtf8String => write!(f, "string is not valid utf-8"), - } - } -} - -impl Error for MemoryAccessError {} - impl From for RuntimeError { fn from(err: MemoryAccessError) -> Self { RuntimeError::new(err.to_string()) diff --git a/lib/api/src/sys/mem_access.rs b/lib/api/src/sys/mem_access.rs index 8a89a4d9c..98c98d2a2 100644 --- a/lib/api/src/sys/mem_access.rs +++ b/lib/api/src/sys/mem_access.rs @@ -1,10 +1,7 @@ use crate::RuntimeError; -use wasmer_types::ValueType; - use crate::{Memory, Memory32, Memory64, WasmPtr}; use std::{ convert::TryInto, - error::Error, fmt, marker::PhantomData, mem::{self, MaybeUninit}, @@ -12,31 +9,24 @@ use std::{ slice, string::FromUtf8Error, }; +use thiserror::Error; +use wasmer_types::ValueType; /// Error for invalid [`Memory`] access. -#[derive(Debug)] +#[derive(Clone, Copy, Debug, Error)] #[non_exhaustive] pub enum MemoryAccessError { /// Memory access is outside heap bounds. + #[error("memory access out of bounds")] HeapOutOfBounds, /// Address calculation overflow. + #[error("address calculation overflow")] Overflow, /// String is not valid UTF-8. + #[error("string is not valid utf-8")] NonUtf8String, } -impl fmt::Display for MemoryAccessError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - MemoryAccessError::HeapOutOfBounds => write!(f, "memory access out of bounds"), - MemoryAccessError::Overflow => write!(f, "address calculation overflow"), - MemoryAccessError::NonUtf8String => write!(f, "string is not valid utf-8"), - } - } -} - -impl Error for MemoryAccessError {} - impl From for RuntimeError { fn from(err: MemoryAccessError) -> Self { RuntimeError::new(err.to_string())