use wasmer_it::interpreter::wasm;
use wasmer_core::memory::{Memory, MemoryView};
pub(super) struct WITMemoryView<'a>(pub(super) MemoryView<'a, u8>);
impl<'a> std::ops::Deref for WITMemoryView<'a> {
type Target = [std::cell::Cell<u8>];
fn deref(&self) -> &Self::Target {
self.0.deref()
}
}
#[derive(Clone)]
pub(super) struct WITMemory(pub(super) Memory);
impl std::ops::Deref for WITMemory {
type Target = Memory;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl wasm::structures::MemoryView for WITMemoryView<'_> {}
impl<'a> wasm::structures::Memory<WITMemoryView<'a>> for WITMemory {
fn view(&self) -> WITMemoryView<'a> {
use wasmer_core::vm::LocalMemory;
let LocalMemory { base, .. } = unsafe { *self.0.vm_local_memory() };
let length = self.0.size().bytes().0 / std::mem::size_of::<u8>();
unsafe { WITMemoryView(MemoryView::new(base as _, length as u32)) }
}
}