Fixed wasmer-js

This commit is contained in:
Syrus Akbary
2021-07-27 11:35:11 -07:00
parent 5120b7172e
commit fe49a91df2

View File

@@ -86,13 +86,6 @@ impl<T: Copy, Ty> WasmPtr<T, Ty> {
} }
} }
#[inline(always)]
fn align_pointer(ptr: usize, align: usize) -> usize {
// clears bits below aligment amount (assumes power of 2) to align pointer
debug_assert!(align.count_ones() == 1);
ptr & !(align - 1)
}
/// Methods for `WasmPtr`s to data that can be dereferenced, namely to types /// Methods for `WasmPtr`s to data that can be dereferenced, namely to types
/// that implement [`ValueType`], meaning that they're valid for all possible /// that implement [`ValueType`], meaning that they're valid for all possible
/// bit patterns. /// bit patterns.
@@ -109,8 +102,7 @@ impl<T: Copy + ValueType> WasmPtr<T, Item> {
if total_len > memory.size().bytes().0 || mem::size_of::<T>() == 0 { if total_len > memory.size().bytes().0 || mem::size_of::<T>() == 0 {
return None; return None;
} }
let offset = align_pointer(self.offset as usize, mem::align_of::<T>()) as u32; let subarray = memory.uint8view().subarray(self.offset, total_len as u32);
let subarray = memory.uint8view().subarray(offset, total_len as u32);
Some(WasmCell::new(subarray)) Some(WasmCell::new(subarray))
} }
} }
@@ -140,14 +132,13 @@ impl<T: Copy + ValueType> WasmPtr<T, Array> {
return None; return None;
} }
let offset = align_pointer(self.offset as usize, mem::align_of::<T>()) as u32;
Some( Some(
(0..length) (0..length)
.map(|i| { .map(|i| {
let subarray = memory let subarray = memory.uint8view().subarray(
.uint8view() self.offset + i * item_size,
.subarray(offset + i * item_size, offset + (i + 1) * item_size); self.offset + (i + 1) * item_size,
);
WasmCell::new(subarray) WasmCell::new(subarray)
}) })
.collect::<Vec<_>>(), .collect::<Vec<_>>(),