Struct WasmExnType

Source
pub struct WasmExnType {
    pub func_ty: EngineOrModuleTypeIndex,
    pub fields: Box<[WasmFieldType]>,
}
Expand description

WebAssembly exception type.

This “exception type” is not a Wasm language-level concept. Instead, it denotes an exception object signature – the types of the payload values.

In contrast, at the Wasm language level, exception objects are associated with specific tags, and these tags refer to their signatures (function types). However, tags are nominal: like memories and tables, a separate instance of a tag exists for every instance of the defining module, and these tag instances can be imported and exported. At runtime we handle tags like we do memories and tables, but these runtime instances do not exist in the type system here.

Because the Wasm type system does not have concrete exn types (i.e., the heap-type lattice has only top exn and bottom noexn), we are free to decide what we mean by “concrete type” here. Thus, we define an “exception type” to refer to the type-level signature. When a particular exception object is created in a store, it can be associated with a particular tag instance also in that store, and the compatibility is checked (the tag’s function type must match the function type in the associated WasmExnType).

Fields§

§func_ty: EngineOrModuleTypeIndex

The function type from which we get our signature. We hold this directly so that we can efficiently derive a FuncType without re-interning the field types.

§fields: Box<[WasmFieldType]>

The fields (payload values) that make up this exception type.

While we could obtain these by looking up the func_ty above, we also need to be able to derive a GC object layout from this type descriptor without referencing other type descriptors; so we directly inline the information here.

Trait Implementations§

Source§

impl Clone for WasmExnType

Source§

fn clone(&self) -> WasmExnType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WasmExnType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for WasmExnType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for WasmExnType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for WasmExnType

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for WasmExnType

Source§

fn eq(&self, other: &WasmExnType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for WasmExnType

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TypeTrace for WasmExnType

Source§

fn trace<F, E>(&self, func: &mut F) -> Result<(), E>

Visit each edge. Read more
Source§

fn trace_mut<F, E>(&mut self, func: &mut F) -> Result<(), E>
where F: FnMut(&mut EngineOrModuleTypeIndex) -> Result<(), E>,

Visit each edge, mutably. Read more
Source§

fn trace_engine_indices<F, E>(&self, func: &mut F) -> Result<(), E>
where F: FnMut(VMSharedTypeIndex) -> Result<(), E>,

Trace all VMSharedTypeIndex edges, ignoring other edges.
Source§

fn canonicalize_for_runtime_usage<F>(&mut self, module_to_engine: &mut F)

Canonicalize self by rewriting all type references inside self from module-level interned type indices to engine-level interned type indices. Read more
Source§

fn is_canonicalized_for_runtime_usage(&self) -> bool

Is this type canonicalized for runtime usage?
Source§

fn canonicalize_for_hash_consing<F>( &mut self, rec_group_range: Range<ModuleInternedTypeIndex>, module_to_engine: &mut F, )

Canonicalize 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 more
Source§

fn is_canonicalized_for_hash_consing(&self) -> bool

Is this type canonicalized for hash consing?
Source§

impl Eq for WasmExnType

Source§

impl StructuralPartialEq for WasmExnType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,