pub struct WasmFuncType { /* private fields */ }
Expand description
WebAssembly function type – equivalent of wasmparser
’s FuncType.
Implementations§
Source§impl WasmFuncType
impl WasmFuncType
pub fn new( params: Box<[WasmValType]>, returns: Box<[WasmValType]>, ) -> WasmFuncType
Sourcepub fn params(&self) -> &[WasmValType]
pub fn params(&self) -> &[WasmValType]
Function params types.
Sourcepub fn non_i31_gc_ref_params_count(&self) -> usize
pub fn non_i31_gc_ref_params_count(&self) -> usize
How many externref
s are in this function’s params?
Sourcepub fn returns(&self) -> &[WasmValType]
pub fn returns(&self) -> &[WasmValType]
Returns params types.
Sourcepub fn non_i31_gc_ref_returns_count(&self) -> usize
pub fn non_i31_gc_ref_returns_count(&self) -> usize
How many externref
s are in this function’s returns?
Sourcepub fn is_trampoline_type(&self) -> bool
pub fn is_trampoline_type(&self) -> bool
Is this function type compatible with trampoline usage in Wasmtime?
Sourcepub fn trampoline_type(&self) -> Cow<'_, WasmFuncType>
pub fn trampoline_type(&self) -> Cow<'_, WasmFuncType>
Get the version of this function type that is suitable for usage as a trampoline in Wasmtime.
If this function is suitable for trampoline usage as-is, then a borrowed
Cow
is returned. If it must be tweaked for trampoline usage, then an
owned Cow
is returned.
§What is a trampoline type?
All reference types in parameters and results are mapped to their
nullable top type, e.g. (ref $my_struct_type)
becomes (ref null any)
.
This allows us to share trampolines between functions whose signatures
both map to the same trampoline type. It also allows the host to satisfy
a Wasm module’s function import of type S
with a function of type T
where T <: S
, even when the Wasm module never defines the type T
(and might never even be able to!)
The flip side is that this adds a constraint to our trampolines: they can only pass references around (e.g. move a reference from one calling convention’s location to another’s) and may not actually inspect the references themselves (unless the trampolines start doing explicit, fallible downcasts, but if we ever need that, then we might want to redesign this stuff).
Trait Implementations§
Source§impl Clone for WasmFuncType
impl Clone for WasmFuncType
Source§fn clone(&self) -> WasmFuncType
fn clone(&self) -> WasmFuncType
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for WasmFuncType
impl Debug for WasmFuncType
Source§impl<'de> Deserialize<'de> for WasmFuncType
impl<'de> Deserialize<'de> for WasmFuncType
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<WasmFuncType, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<WasmFuncType, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Display for WasmFuncType
impl Display for WasmFuncType
Source§impl Hash for WasmFuncType
impl Hash for WasmFuncType
Source§impl PartialEq for WasmFuncType
impl PartialEq for WasmFuncType
Source§impl Serialize for WasmFuncType
impl Serialize for WasmFuncType
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Source§impl TypeTrace for WasmFuncType
impl TypeTrace for WasmFuncType
Source§fn trace_mut<F, E>(&mut self, func: &mut F) -> Result<(), E>
fn trace_mut<F, E>(&mut self, func: &mut F) -> Result<(), E>
Source§fn trace_engine_indices<F, E>(&self, func: &mut F) -> Result<(), E>
fn trace_engine_indices<F, E>(&self, func: &mut F) -> Result<(), E>
VMSharedTypeIndex
edges, ignoring other edges.Source§fn canonicalize_for_runtime_usage<F>(&mut self, module_to_engine: &mut F)
fn canonicalize_for_runtime_usage<F>(&mut self, module_to_engine: &mut F)
self
by rewriting all type references inside self
from
module-level interned type indices to engine-level interned type
indices. Read moreSource§fn is_canonicalized_for_runtime_usage(&self) -> bool
fn is_canonicalized_for_runtime_usage(&self) -> bool
Source§fn canonicalize_for_hash_consing<F>(
&mut self,
rec_group_range: Range<ModuleInternedTypeIndex>,
module_to_engine: &mut F,
)
fn canonicalize_for_hash_consing<F>( &mut self, rec_group_range: Range<ModuleInternedTypeIndex>, module_to_engine: &mut F, )
self
by rewriting all type references inside self
from
module-level interned type indices to either engine-level interned type
indices or recgroup-relative indices. Read moreSource§fn is_canonicalized_for_hash_consing(&self) -> bool
fn is_canonicalized_for_hash_consing(&self) -> bool
impl Eq for WasmFuncType
impl StructuralPartialEq for WasmFuncType
Auto Trait Implementations§
impl Freeze for WasmFuncType
impl RefUnwindSafe for WasmFuncType
impl Send for WasmFuncType
impl Sync for WasmFuncType
impl Unpin for WasmFuncType
impl UnwindSafe for WasmFuncType
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: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> IntoAnyhow for T
impl<T> IntoAnyhow for T
Source§fn into_anyhow(self) -> Error
fn into_anyhow(self) -> Error
self
into an anyhow::Error
.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