Use ptr::cast instead of as casts in several places. (#3507)
`ptr::cast` has the advantage of being unable to silently cast `*const T` to `*mut T`. This turned up several places that were performing such casts, which this PR also fixes.
This commit is contained in:
@@ -874,7 +874,7 @@ fn lookup_with_dlsym(name: &str) -> Option<*const u8> {
|
|||||||
// try to find the searched symbol in the currently running executable
|
// try to find the searched symbol in the currently running executable
|
||||||
ptr::null_mut(),
|
ptr::null_mut(),
|
||||||
// try to find the searched symbol in local c runtime
|
// try to find the searched symbol in local c runtime
|
||||||
winapi::um::libloaderapi::GetModuleHandleA(MSVCRT_DLL.as_ptr() as *const i8),
|
winapi::um::libloaderapi::GetModuleHandleA(MSVCRT_DLL.as_ptr().cast::<i8>()),
|
||||||
];
|
];
|
||||||
|
|
||||||
for handle in &handles {
|
for handle in &handles {
|
||||||
|
|||||||
@@ -200,11 +200,7 @@ unsafe fn register_unwind_info(obj: &File, text: &[u8]) -> Result<Option<UnwindR
|
|||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
Ok(Some(
|
Ok(Some(
|
||||||
UnwindRegistration::new(
|
UnwindRegistration::new(text.as_ptr(), unwind_info.as_ptr(), unwind_info.len())
|
||||||
text.as_ptr() as *mut _,
|
.context("failed to create unwind info registration")?,
|
||||||
unwind_info.as_ptr() as *mut _,
|
|
||||||
unwind_info.len(),
|
|
||||||
)
|
|
||||||
.context("failed to create unwind info registration")?,
|
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -387,16 +387,13 @@ impl CompiledModule {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub fn finished_functions(
|
pub fn finished_functions(
|
||||||
&self,
|
&self,
|
||||||
) -> impl ExactSizeIterator<Item = (DefinedFuncIndex, *mut [VMFunctionBody])> + '_ {
|
) -> impl ExactSizeIterator<Item = (DefinedFuncIndex, *const [VMFunctionBody])> + '_ {
|
||||||
let code = self.code();
|
let code = self.code();
|
||||||
self.funcs.iter().map(move |(i, info)| {
|
self.funcs.iter().map(move |(i, info)| {
|
||||||
let func = &code[info.start as usize..][..info.length as usize];
|
let func = &code[info.start as usize..][..info.length as usize];
|
||||||
(
|
(
|
||||||
i,
|
i,
|
||||||
std::ptr::slice_from_raw_parts_mut(
|
std::ptr::slice_from_raw_parts(func.as_ptr().cast::<VMFunctionBody>(), func.len()),
|
||||||
func.as_ptr() as *mut VMFunctionBody,
|
|
||||||
func.len(),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -423,7 +420,7 @@ impl CompiledModule {
|
|||||||
/// memory with the stack maps associated with those bytes.
|
/// memory with the stack maps associated with those bytes.
|
||||||
pub fn stack_maps(
|
pub fn stack_maps(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (*mut [VMFunctionBody], &[StackMapInformation])> {
|
) -> impl Iterator<Item = (*const [VMFunctionBody], &[StackMapInformation])> {
|
||||||
self.finished_functions()
|
self.finished_functions()
|
||||||
.map(|(_, f)| f)
|
.map(|(_, f)| f)
|
||||||
.zip(self.funcs.values().map(|f| f.stack_maps.as_slice()))
|
.zip(self.funcs.values().map(|f| f.stack_maps.as_slice()))
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ impl State {
|
|||||||
let tid = pid; // ThreadId does appear to track underlying thread. Using PID.
|
let tid = pid; // ThreadId does appear to track underlying thread. Using PID.
|
||||||
|
|
||||||
for (idx, func) in module.finished_functions() {
|
for (idx, func) in module.finished_functions() {
|
||||||
let (addr, len) = unsafe { ((*func).as_ptr() as *const u8, (*func).len()) };
|
let (addr, len) = unsafe { ((*func).as_ptr().cast::<u8>(), (*func).len()) };
|
||||||
if let Some(img) = &dbg_image {
|
if let Some(img) = &dbg_image {
|
||||||
if let Err(err) = self.dump_from_debug_image(img, "wasm", addr, len, pid, tid) {
|
if let Err(err) = self.dump_from_debug_image(img, "wasm", addr, len, pid, tid) {
|
||||||
println!(
|
println!(
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ impl State {
|
|||||||
.unwrap_or_else(|| format!("wasm_module_{}", global_module_id));
|
.unwrap_or_else(|| format!("wasm_module_{}", global_module_id));
|
||||||
|
|
||||||
for (idx, func) in module.finished_functions() {
|
for (idx, func) in module.finished_functions() {
|
||||||
let (addr, len) = unsafe { ((*func).as_ptr() as *const u8, (*func).len()) };
|
let (addr, len) = unsafe { ((*func).as_ptr().cast::<u8>(), (*func).len()) };
|
||||||
let method_name = super::debug_name(module.module(), idx);
|
let method_name = super::debug_name(module.module(), idx);
|
||||||
let method_id = self.get_method_id();
|
let method_id = self.get_method_id();
|
||||||
log::trace!(
|
log::trace!(
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ impl UnwindRegistration {
|
|||||||
/// describe an in-memory representation of a `.eh_frame` section. This is
|
/// describe an in-memory representation of a `.eh_frame` section. This is
|
||||||
/// typically arranged for by the `wasmtime-obj` crate.
|
/// typically arranged for by the `wasmtime-obj` crate.
|
||||||
pub unsafe fn new(
|
pub unsafe fn new(
|
||||||
_base_address: *mut u8,
|
_base_address: *const u8,
|
||||||
unwind_info: *mut u8,
|
unwind_info: *const u8,
|
||||||
unwind_len: usize,
|
unwind_len: usize,
|
||||||
) -> Result<UnwindRegistration> {
|
) -> Result<UnwindRegistration> {
|
||||||
debug_assert_eq!(
|
debug_assert_eq!(
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ pub struct UnwindRegistration {
|
|||||||
|
|
||||||
impl UnwindRegistration {
|
impl UnwindRegistration {
|
||||||
pub unsafe fn new(
|
pub unsafe fn new(
|
||||||
base_address: *mut u8,
|
base_address: *const u8,
|
||||||
unwind_info: *mut u8,
|
unwind_info: *const u8,
|
||||||
unwind_len: usize,
|
unwind_len: usize,
|
||||||
) -> Result<UnwindRegistration> {
|
) -> Result<UnwindRegistration> {
|
||||||
assert!(unwind_info as usize % 4 == 0);
|
assert!(unwind_info as usize % 4 == 0);
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ impl VMExternRef {
|
|||||||
/// or `PartialEq` implementation of the pointed-to values.
|
/// or `PartialEq` implementation of the pointed-to values.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn eq(a: &Self, b: &Self) -> bool {
|
pub fn eq(a: &Self, b: &Self) -> bool {
|
||||||
ptr::eq(a.0.as_ptr() as *const _, b.0.as_ptr() as *const _)
|
ptr::eq(a.0.as_ptr(), b.0.as_ptr())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Hash a given `VMExternRef`.
|
/// Hash a given `VMExternRef`.
|
||||||
@@ -434,7 +434,7 @@ impl VMExternRef {
|
|||||||
where
|
where
|
||||||
H: Hasher,
|
H: Hasher,
|
||||||
{
|
{
|
||||||
ptr::hash(externref.0.as_ptr() as *const _, hasher);
|
ptr::hash(externref.0.as_ptr(), hasher);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compare two `VMExternRef`s.
|
/// Compare two `VMExternRef`s.
|
||||||
@@ -566,8 +566,8 @@ impl VMExternRefActivationsTable {
|
|||||||
|
|
||||||
/// Create a new `VMExternRefActivationsTable`.
|
/// Create a new `VMExternRefActivationsTable`.
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let chunk = Self::new_chunk(Self::CHUNK_SIZE);
|
let mut chunk = Self::new_chunk(Self::CHUNK_SIZE);
|
||||||
let next = chunk.as_ptr() as *mut TableElem;
|
let next = chunk.as_mut_ptr().cast::<TableElem>();
|
||||||
let end = unsafe { next.add(chunk.len()) };
|
let end = unsafe { next.add(chunk.len()) };
|
||||||
|
|
||||||
VMExternRefActivationsTable {
|
VMExternRefActivationsTable {
|
||||||
@@ -703,7 +703,7 @@ impl VMExternRefActivationsTable {
|
|||||||
precise_stack_roots: &mut HashSet<VMExternRefWithTraits>,
|
precise_stack_roots: &mut HashSet<VMExternRefWithTraits>,
|
||||||
root: NonNull<VMExternData>,
|
root: NonNull<VMExternData>,
|
||||||
) {
|
) {
|
||||||
let root = unsafe { VMExternRef::clone_from_raw(root.as_ptr() as *mut _) };
|
let root = unsafe { VMExternRef::clone_from_raw(root.as_ptr().cast()) };
|
||||||
precise_stack_roots.insert(VMExternRefWithTraits(root));
|
precise_stack_roots.insert(VMExternRefWithTraits(root));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -730,7 +730,7 @@ impl VMExternRefActivationsTable {
|
|||||||
|
|
||||||
// Reset our `next` finger to the start of the bump allocation chunk.
|
// Reset our `next` finger to the start of the bump allocation chunk.
|
||||||
unsafe {
|
unsafe {
|
||||||
let next = self.alloc.chunk.as_ptr() as *mut TableElem;
|
let next = self.alloc.chunk.as_mut_ptr().cast::<TableElem>();
|
||||||
debug_assert!(!next.is_null());
|
debug_assert!(!next.is_null());
|
||||||
*self.alloc.next.get() = NonNull::new_unchecked(next);
|
*self.alloc.next.get() = NonNull::new_unchecked(next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ impl Instance {
|
|||||||
/// Helper function to access various locations offset from our `*mut
|
/// Helper function to access various locations offset from our `*mut
|
||||||
/// VMContext` object.
|
/// VMContext` object.
|
||||||
unsafe fn vmctx_plus_offset<T>(&self, offset: u32) -> *mut T {
|
unsafe fn vmctx_plus_offset<T>(&self, offset: u32) -> *mut T {
|
||||||
(self.vmctx_ptr() as *mut u8)
|
(self.vmctx_ptr().cast::<u8>())
|
||||||
.add(usize::try_from(offset).unwrap())
|
.add(usize::try_from(offset).unwrap())
|
||||||
.cast()
|
.cast()
|
||||||
}
|
}
|
||||||
@@ -420,7 +420,8 @@ impl Instance {
|
|||||||
|
|
||||||
// Keep the `VMContext` pointers used by compiled Wasm code up to
|
// Keep the `VMContext` pointers used by compiled Wasm code up to
|
||||||
// date.
|
// date.
|
||||||
self.set_table(table_index, self.tables[table_index].vmtable());
|
let element = self.tables[table_index].vmtable();
|
||||||
|
self.set_table(table_index, element);
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -476,10 +476,10 @@ impl Memory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Return a `VMMemoryDefinition` for exposing the memory to compiled wasm code.
|
/// Return a `VMMemoryDefinition` for exposing the memory to compiled wasm code.
|
||||||
pub fn vmmemory(&self) -> VMMemoryDefinition {
|
pub fn vmmemory(&mut self) -> VMMemoryDefinition {
|
||||||
match self {
|
match self {
|
||||||
Memory::Static { base, size, .. } => VMMemoryDefinition {
|
Memory::Static { base, size, .. } => VMMemoryDefinition {
|
||||||
base: base.as_ptr() as *mut _,
|
base: base.as_mut_ptr().cast(),
|
||||||
current_length: *size,
|
current_length: *size,
|
||||||
},
|
},
|
||||||
Memory::Dynamic(mem) => mem.vmmemory(),
|
Memory::Dynamic(mem) => mem.vmmemory(),
|
||||||
|
|||||||
@@ -398,14 +398,14 @@ impl Table {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Return a `VMTableDefinition` for exposing the table to compiled wasm code.
|
/// Return a `VMTableDefinition` for exposing the table to compiled wasm code.
|
||||||
pub fn vmtable(&self) -> VMTableDefinition {
|
pub fn vmtable(&mut self) -> VMTableDefinition {
|
||||||
match self {
|
match self {
|
||||||
Table::Static { data, size, .. } => VMTableDefinition {
|
Table::Static { data, size, .. } => VMTableDefinition {
|
||||||
base: data.as_ptr() as *mut _,
|
base: data.as_mut_ptr().cast(),
|
||||||
current_elements: *size,
|
current_elements: *size,
|
||||||
},
|
},
|
||||||
Table::Dynamic { elements, .. } => VMTableDefinition {
|
Table::Dynamic { elements, .. } => VMTableDefinition {
|
||||||
base: elements.as_ptr() as _,
|
base: elements.as_mut_ptr().cast(),
|
||||||
current_elements: elements.len().try_into().unwrap(),
|
current_elements: elements.len().try_into().unwrap(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -340,145 +340,157 @@ impl VMGlobalDefinition {
|
|||||||
/// Return a reference to the value as an i32.
|
/// Return a reference to the value as an i32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_i32(&self) -> &i32 {
|
pub unsafe fn as_i32(&self) -> &i32 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const i32)
|
&*(self.storage.as_ref().as_ptr().cast::<i32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an i32.
|
/// Return a mutable reference to the value as an i32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_i32_mut(&mut self) -> &mut i32 {
|
pub unsafe fn as_i32_mut(&mut self) -> &mut i32 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut i32)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<i32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as a u32.
|
/// Return a reference to the value as a u32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u32(&self) -> &u32 {
|
pub unsafe fn as_u32(&self) -> &u32 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const u32)
|
&*(self.storage.as_ref().as_ptr().cast::<u32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an u32.
|
/// Return a mutable reference to the value as an u32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u32_mut(&mut self) -> &mut u32 {
|
pub unsafe fn as_u32_mut(&mut self) -> &mut u32 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u32)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<u32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an i64.
|
/// Return a reference to the value as an i64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_i64(&self) -> &i64 {
|
pub unsafe fn as_i64(&self) -> &i64 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const i64)
|
&*(self.storage.as_ref().as_ptr().cast::<i64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an i64.
|
/// Return a mutable reference to the value as an i64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_i64_mut(&mut self) -> &mut i64 {
|
pub unsafe fn as_i64_mut(&mut self) -> &mut i64 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut i64)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<i64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an u64.
|
/// Return a reference to the value as an u64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u64(&self) -> &u64 {
|
pub unsafe fn as_u64(&self) -> &u64 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const u64)
|
&*(self.storage.as_ref().as_ptr().cast::<u64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an u64.
|
/// Return a mutable reference to the value as an u64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u64_mut(&mut self) -> &mut u64 {
|
pub unsafe fn as_u64_mut(&mut self) -> &mut u64 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u64)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<u64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an f32.
|
/// Return a reference to the value as an f32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f32(&self) -> &f32 {
|
pub unsafe fn as_f32(&self) -> &f32 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const f32)
|
&*(self.storage.as_ref().as_ptr().cast::<f32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an f32.
|
/// Return a mutable reference to the value as an f32.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f32_mut(&mut self) -> &mut f32 {
|
pub unsafe fn as_f32_mut(&mut self) -> &mut f32 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut f32)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<f32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as f32 bits.
|
/// Return a reference to the value as f32 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f32_bits(&self) -> &u32 {
|
pub unsafe fn as_f32_bits(&self) -> &u32 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const u32)
|
&*(self.storage.as_ref().as_ptr().cast::<u32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as f32 bits.
|
/// Return a mutable reference to the value as f32 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f32_bits_mut(&mut self) -> &mut u32 {
|
pub unsafe fn as_f32_bits_mut(&mut self) -> &mut u32 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u32)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<u32>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an f64.
|
/// Return a reference to the value as an f64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f64(&self) -> &f64 {
|
pub unsafe fn as_f64(&self) -> &f64 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const f64)
|
&*(self.storage.as_ref().as_ptr().cast::<f64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an f64.
|
/// Return a mutable reference to the value as an f64.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f64_mut(&mut self) -> &mut f64 {
|
pub unsafe fn as_f64_mut(&mut self) -> &mut f64 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut f64)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<f64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as f64 bits.
|
/// Return a reference to the value as f64 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f64_bits(&self) -> &u64 {
|
pub unsafe fn as_f64_bits(&self) -> &u64 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const u64)
|
&*(self.storage.as_ref().as_ptr().cast::<u64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as f64 bits.
|
/// Return a mutable reference to the value as f64 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_f64_bits_mut(&mut self) -> &mut u64 {
|
pub unsafe fn as_f64_bits_mut(&mut self) -> &mut u64 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u64)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<u64>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an u128.
|
/// Return a reference to the value as an u128.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u128(&self) -> &u128 {
|
pub unsafe fn as_u128(&self) -> &u128 {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const u128)
|
&*(self.storage.as_ref().as_ptr().cast::<u128>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an u128.
|
/// Return a mutable reference to the value as an u128.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u128_mut(&mut self) -> &mut u128 {
|
pub unsafe fn as_u128_mut(&mut self) -> &mut u128 {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u128)
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<u128>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as u128 bits.
|
/// Return a reference to the value as u128 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u128_bits(&self) -> &[u8; 16] {
|
pub unsafe fn as_u128_bits(&self) -> &[u8; 16] {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const [u8; 16])
|
&*(self.storage.as_ref().as_ptr().cast::<[u8; 16]>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as u128 bits.
|
/// Return a mutable reference to the value as u128 bits.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_u128_bits_mut(&mut self) -> &mut [u8; 16] {
|
pub unsafe fn as_u128_bits_mut(&mut self) -> &mut [u8; 16] {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut [u8; 16])
|
&mut *(self.storage.as_mut().as_mut_ptr().cast::<[u8; 16]>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an externref.
|
/// Return a reference to the value as an externref.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_externref(&self) -> &Option<VMExternRef> {
|
pub unsafe fn as_externref(&self) -> &Option<VMExternRef> {
|
||||||
&*(self.storage.as_ref().as_ptr() as *const Option<VMExternRef>)
|
&*(self.storage.as_ref().as_ptr().cast::<Option<VMExternRef>>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an externref.
|
/// Return a mutable reference to the value as an externref.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_externref_mut(&mut self) -> &mut Option<VMExternRef> {
|
pub unsafe fn as_externref_mut(&mut self) -> &mut Option<VMExternRef> {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut Option<VMExternRef>)
|
&mut *(self
|
||||||
|
.storage
|
||||||
|
.as_mut()
|
||||||
|
.as_mut_ptr()
|
||||||
|
.cast::<Option<VMExternRef>>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a reference to the value as an anyfunc.
|
/// Return a reference to the value as an anyfunc.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_anyfunc(&self) -> *const VMCallerCheckedAnyfunc {
|
pub unsafe fn as_anyfunc(&self) -> *const VMCallerCheckedAnyfunc {
|
||||||
*(self.storage.as_ref().as_ptr() as *const *const VMCallerCheckedAnyfunc)
|
*(self
|
||||||
|
.storage
|
||||||
|
.as_ref()
|
||||||
|
.as_ptr()
|
||||||
|
.cast::<*const VMCallerCheckedAnyfunc>())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a mutable reference to the value as an anyfunc.
|
/// Return a mutable reference to the value as an anyfunc.
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
pub unsafe fn as_anyfunc_mut(&mut self) -> &mut *const VMCallerCheckedAnyfunc {
|
pub unsafe fn as_anyfunc_mut(&mut self) -> &mut *const VMCallerCheckedAnyfunc {
|
||||||
&mut *(self.storage.as_mut().as_mut_ptr() as *mut *const VMCallerCheckedAnyfunc)
|
&mut *(self
|
||||||
|
.storage
|
||||||
|
.as_mut()
|
||||||
|
.as_mut_ptr()
|
||||||
|
.cast::<*const VMCallerCheckedAnyfunc>())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1553,7 +1553,7 @@ fn dirent_bytes(dirent: types::Dirent) -> Vec<u8> {
|
|||||||
.expect("Dirent is smaller than 2^32");
|
.expect("Dirent is smaller than 2^32");
|
||||||
let mut bytes = Vec::with_capacity(size);
|
let mut bytes = Vec::with_capacity(size);
|
||||||
bytes.resize(size, 0);
|
bytes.resize(size, 0);
|
||||||
let ptr = bytes.as_mut_ptr() as *mut types::Dirent;
|
let ptr = bytes.as_mut_ptr().cast::<types::Dirent>();
|
||||||
let guest_dirent = types::Dirent {
|
let guest_dirent = types::Dirent {
|
||||||
d_ino: dirent.d_ino.to_le(),
|
d_ino: dirent.d_ino.to_le(),
|
||||||
d_namlen: dirent.d_namlen.to_le(),
|
d_namlen: dirent.d_namlen.to_le(),
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ impl Global {
|
|||||||
Val::F64(f) => *definition.as_u64_mut() = f,
|
Val::F64(f) => *definition.as_u64_mut() = f,
|
||||||
Val::FuncRef(f) => {
|
Val::FuncRef(f) => {
|
||||||
*definition.as_anyfunc_mut() = f.map_or(ptr::null(), |f| {
|
*definition.as_anyfunc_mut() = f.map_or(ptr::null(), |f| {
|
||||||
f.caller_checked_anyfunc(store).as_ptr() as *const _
|
f.caller_checked_anyfunc(store).as_ptr().cast()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Val::ExternRef(x) => {
|
Val::ExternRef(x) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user