Add unsigned access methods to VMGlobalDefinition.

This commit is contained in:
Dan Gohman
2018-12-13 15:50:58 -08:00
parent 717f60bda1
commit 0c0ccc5d09
2 changed files with 26 additions and 2 deletions

View File

@@ -329,7 +329,7 @@ fn check_table_init_bounds(instance: &mut Instance) -> Result<(), InstantiationE
} else { } else {
unsafe { instance.vmctx.imported_global(base).from } unsafe { instance.vmctx.imported_global(base).from }
}; };
start += unsafe { *(&*global).as_i32() } as u32 as usize; start += unsafe { *(&*global).as_u32() } as usize;
} }
// TODO: Refactor this. // TODO: Refactor this.
@@ -368,7 +368,7 @@ fn check_memory_init_bounds(
} else { } else {
unsafe { instance.vmctx.imported_global(base).from } unsafe { instance.vmctx.imported_global(base).from }
}; };
start += unsafe { *(&*global).as_i32() } as u32 as usize; start += unsafe { *(&*global).as_u32() } as usize;
} }
// TODO: Refactor this. // TODO: Refactor this.

View File

@@ -295,6 +295,18 @@ impl VMGlobalDefinition {
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i32) &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i32)
} }
/// Return a reference to the value as a u32.
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn as_u32(&self) -> &u32 {
&*(self.storage.as_ref().as_ptr() as *const u8 as *const u32)
}
/// Return a mutable reference to the value as an u32.
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn as_u32_mut(&mut self) -> &mut u32 {
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut 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 {
@@ -307,6 +319,18 @@ impl VMGlobalDefinition {
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i64) &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i64)
} }
/// Return a reference to the value as an u64.
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn as_u64(&self) -> &u64 {
&*(self.storage.as_ref().as_ptr() as *const u8 as *const u64)
}
/// Return a mutable reference to the value as an u64.
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn as_u64_mut(&mut self) -> &mut u64 {
&mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut 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 {