Struct ExnRefPre
pub struct ExnRefPre { /* private fields */ }
Expand description
An allocator for a particular Wasm GC exception type.
Every ExnRefPre
is associated with a particular
Store
and a particular
ExnType.
Reusing an allocator across many allocations amortizes some
per-type runtime overheads inside Wasmtime. An ExnRefPre
is to
ExnRef
s as an InstancePre
is to Instance
s.
§Example
use wasmtime::*;
let mut config = Config::new();
config.wasm_function_references(true);
config.wasm_gc(true);
let engine = Engine::new(&config)?;
let mut store = Store::new(&engine, ());
// Define a exn type.
let exn_ty = ExnType::new(
store.engine(),
[ValType::I32],
)?;
// Create an allocator for the exn type.
let allocator = ExnRefPre::new(&mut store, exn_ty.clone());
// Create a tag instance to associate with our exception objects.
let tag = Tag::new(&mut store, &exn_ty.tag_type()).unwrap();
{
let mut scope = RootScope::new(&mut store);
// Allocate a bunch of instances of our exception type using the same
// allocator! This is faster than creating a new allocator for each
// instance we want to allocate.
for i in 0..10 {
ExnRef::new(&mut scope, &allocator, &tag, &[Val::I32(i)])?;
}
}
Implementations§
Auto Trait Implementations§
impl Freeze for ExnRefPre
impl !RefUnwindSafe for ExnRefPre
impl Send for ExnRefPre
impl Sync for ExnRefPre
impl Unpin for ExnRefPre
impl !UnwindSafe for ExnRefPre
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
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
Converts
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> ⓘ
Converts
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