pub struct Global(/* private fields */);
Expand description
A WebAssembly global
value which can be read and written to.
A global
in WebAssembly is sort of like a global variable within an
Instance
. The global.get
and global.set
instructions will modify and read global values in a wasm module. Globals
can either be imported or exported from wasm modules.
A Global
“belongs” to the store that it was originally created within
(either via Global::new
or via instantiating a
Module
). Operations on a Global
only work with the
store it belongs to, and if another store is passed in by accident then
methods will panic.
Implementations§
source§impl Global
impl Global
sourcepub fn new(store: impl AsContextMut, ty: GlobalType, val: Val) -> Result<Global>
pub fn new(store: impl AsContextMut, ty: GlobalType, val: Val) -> Result<Global>
Creates a new WebAssembly global
value with the provide type ty
and
initial value val
.
The store
argument will be the owner of the Global
returned. Using
the returned Global
other items in the store may access this global.
For example this could be provided as an argument to
Instance::new
or
Linker::define
.
§Errors
Returns an error if the ty
provided does not match the type of the
value val
, or if val
comes from a different store than store
.
§Examples
let engine = Engine::default();
let mut store = Store::new(&engine, ());
let ty = GlobalType::new(ValType::I32, Mutability::Const);
let i32_const = Global::new(&mut store, ty, 1i32.into())?;
let ty = GlobalType::new(ValType::F64, Mutability::Var);
let f64_mut = Global::new(&mut store, ty, 2.0f64.into())?;
let module = Module::new(
&engine,
"(module
(global (import \"\" \"i32-const\") i32)
(global (import \"\" \"f64-mut\") (mut f64))
)"
)?;
let mut linker = Linker::new(&engine);
linker.define(&store, "", "i32-const", i32_const)?;
linker.define(&store, "", "f64-mut", f64_mut)?;
let instance = linker.instantiate(&mut store, &module)?;
// ...
sourcepub fn ty(&self, store: impl AsContext) -> GlobalType
pub fn ty(&self, store: impl AsContext) -> GlobalType
sourcepub fn get(&self, store: impl AsContextMut) -> Val
pub fn get(&self, store: impl AsContextMut) -> Val
Trait Implementations§
impl Copy for Global
Auto Trait Implementations§
impl Freeze for Global
impl RefUnwindSafe for Global
impl Send for Global
impl Sync for Global
impl Unpin for Global
impl UnwindSafe for Global
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more