wasmparser

Struct WasmFeatures

Source
pub struct WasmFeatures(/* private fields */);
Expand description

Flags for features that are enabled for validation.

This type controls the set of WebAssembly proposals and features that are active during validation and parsing of WebAssembly binaries. This is used in conjunction with Validator::new_with_features for example.

The Default implementation for this structure returns the set of supported WebAssembly proposals this crate implements. All features are required to be in Phase 4 or above in the WebAssembly standardization process.

Enabled/disabled features can affect both parsing and validation at this time. When decoding a WebAssembly binary it’s generally recommended if possible to enable all features, as is the default with BinaryReader::new. If strict conformance with historical versions of the specification are required then BinaryReader::new_features or BinaryReader::set_features can be used.

This crate additionally has a compile-time Cargo feature called features which can be used to enable/disable most of this type at compile time. This crate feature is turned on by default and enables this bitflags-representation of this structure. When the features feature is disabled then this is a zero-sized structure and no longer has any associated constants. When features are disabled all values for proposals are fixed at compile time to their defaults.

Implementations§

Source§

impl WasmFeatures

Source

pub const MUTABLE_GLOBAL: Self = _

The WebAssembly mutable-global proposal. Defaults to true.

Source

pub const SATURATING_FLOAT_TO_INT: Self = _

The WebAssembly saturating-float-to-int proposal. Defaults to true.

Source

pub const SIGN_EXTENSION: Self = _

The WebAssembly sign-extension-ops proposal. Defaults to true.

Source

pub const REFERENCE_TYPES: Self = _

The WebAssembly reference types proposal. Defaults to true.

Source

pub const MULTI_VALUE: Self = _

The WebAssembly multi-value proposal. Defaults to true.

Source

pub const BULK_MEMORY: Self = _

The WebAssembly bulk memory operations proposal. Defaults to true.

Source

pub const SIMD: Self = _

The WebAssembly SIMD proposal. Defaults to true.

Source

pub const RELAXED_SIMD: Self = _

The WebAssembly Relaxed SIMD proposal. Defaults to true.

Source

pub const THREADS: Self = _

The WebAssembly threads proposal. Defaults to true.

Source

pub const SHARED_EVERYTHING_THREADS: Self = _

The WebAssembly shared-everything-threads proposal; includes new component model built-ins. Defaults to false.

Source

pub const TAIL_CALL: Self = _

The WebAssembly tail-call proposal. Defaults to true.

Source

pub const FLOATS: Self = _

Whether or not floating-point instructions are enabled.

This is enabled by default can be used to disallow floating-point operators and types.

This does not correspond to a WebAssembly proposal but is instead intended for embeddings which have stricter-than-usual requirements about execution. Floats in WebAssembly can have different NaN patterns across hosts which can lead to host-dependent execution which some runtimes may not desire. Defaults to true.

Source

pub const MULTI_MEMORY: Self = _

The WebAssembly multi memory proposal. Defaults to true.

Source

pub const EXCEPTIONS: Self = _

The WebAssembly exception handling proposal. Defaults to true.

Source

pub const MEMORY64: Self = _

The WebAssembly memory64 proposal. Defaults to true.

Source

pub const EXTENDED_CONST: Self = _

The WebAssembly extended_const proposal. Defaults to true.

Source

pub const COMPONENT_MODEL: Self = _

The WebAssembly component model proposal. Defaults to true.

Source

pub const FUNCTION_REFERENCES: Self = _

The WebAssembly typed function references proposal. Defaults to true.

Source

pub const MEMORY_CONTROL: Self = _

The WebAssembly memory control proposal. Defaults to false.

Source

pub const GC: Self = _

The WebAssembly gc proposal. Defaults to true.

Source

pub const CUSTOM_PAGE_SIZES: Self = _

The WebAssembly custom-page-sizes proposal. Defaults to false.

Source

pub const COMPONENT_MODEL_VALUES: Self = _

Support for the value type in the component model proposal. Defaults to false.

Source

pub const COMPONENT_MODEL_NESTED_NAMES: Self = _

Support for the nested namespaces and projects in component model names. Defaults to false.

Source

pub const COMPONENT_MODEL_MORE_FLAGS: Self = _

Support for more than 32 flags per-type in the component model. Defaults to false.

Source

pub const COMPONENT_MODEL_MULTIPLE_RETURNS: Self = _

Support for multiple return values in a component model function. Defaults to false.

Source

pub const LEGACY_EXCEPTIONS: Self = _

The WebAssembly legacy exception handling proposal (phase 1)

§Note

Support this feature as long as all leading browsers also support it https://github.com/WebAssembly/exception-handling/blob/main/proposals/exception-handling/legacy/Exceptions.md Defaults to false.

Source

pub const GC_TYPES: Self = _

Whether or not gc types are enabled.

This feature does not correspond to any WebAssembly proposal nor concept in the specification itself. This is intended to assist embedders in disabling support for GC types at validation time. For example if an engine wants to support all of WebAssembly except a runtime garbage collector it could disable this feature.

This features is enabled by default and is used to gate types such as externref or anyref. Note that the requisite WebAssembly proposal must also be enabled for types like externref, meaning that it requires both REFERENCE_TYPES and GC_TYPE to be enabled.

Note that the funcref and exnref types are not gated by this feature. Those are expected to not require a full garbage collector so are not gated by this. Defaults to true.

Source

pub const STACK_SWITCHING: Self = _

The WebAssembly stack-switching proposal. Defaults to false.

Source

pub const WIDE_ARITHMETIC: Self = _

The WebAssembly wide-arithmetic proposal. Defaults to false.

Source§

impl WasmFeatures

Source

pub const fn empty() -> Self

Get a flags value with all bits unset.

Source

pub const fn all() -> Self

Get a flags value with all known bits set.

Source

pub const fn bits(&self) -> u32

Get the underlying bits value.

The returned value is exactly the bits set in this flags value.

Source

pub const fn from_bits(bits: u32) -> Option<Self>

Convert from a bits value.

This method will return None if any unknown bits are set.

Source

pub const fn from_bits_truncate(bits: u32) -> Self

Convert from a bits value, unsetting any unknown bits.

Source

pub const fn from_bits_retain(bits: u32) -> Self

Convert from a bits value exactly.

Source

pub fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set.

This method will return None if name is empty or doesn’t correspond to any named flag.

Source

pub const fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.

Source

pub const fn is_all(&self) -> bool

Whether all known bits in this flags value are set.

Source

pub const fn intersects(&self, other: Self) -> bool

Whether any set bits in a source flags value are also set in a target flags value.

Source

pub const fn contains(&self, other: Self) -> bool

Whether all set bits in a source flags value are also set in a target flags value.

Source

pub fn insert(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

Source

pub fn remove(&mut self, other: Self)

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. remove won’t truncate other, but the ! operator will.

Source

pub fn toggle(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

Source

pub fn set(&mut self, other: Self, value: bool)

Call insert when value is true or remove when value is false.

Source

pub const fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

Source

pub const fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.

Source

pub const fn difference(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

Source

pub const fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

Source

pub const fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

Source§

impl WasmFeatures

Source

pub const fn iter(&self) -> Iter<WasmFeatures>

Yield a set of contained flags values.

Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.

Source

pub const fn iter_names(&self) -> IterNames<WasmFeatures>

Yield a set of contained named flags values.

This method is like iter, except only yields bits in contained named flags. Any unknown bits, or bits not corresponding to a contained flag will not be yielded.

Source§

impl WasmFeatures

Source

pub fn from_inflated(inflated: WasmFeaturesInflated) -> Self

Available on crate feature features only.

Construct a bit-packed WasmFeatures from the inflated struct version.

Source

pub fn inflate(&self) -> WasmFeaturesInflated

Available on crate feature features only.

Inflate these bit-packed features into a struct with a field per feature.

Although the inflated struct takes up much more memory than the bit-packed version, its fields can be exhaustively matched upon. This makes it useful for temporarily checking against, while keeping the bit-packed version as the method of storing the features for longer periods of time.

Source

pub fn mutable_global(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn saturating_float_to_int(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn sign_extension(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn reference_types(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn multi_value(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn bulk_memory(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn simd(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn relaxed_simd(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn threads(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn shared_everything_threads(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn tail_call(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn floats(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn multi_memory(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn exceptions(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn memory64(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn extended_const(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn component_model(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn function_references(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn memory_control(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn gc(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn custom_page_sizes(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn component_model_values(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn component_model_nested_names(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn component_model_more_flags(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn component_model_multiple_returns(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn legacy_exceptions(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn gc_types(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn stack_switching(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source

pub fn wide_arithmetic(&self) -> bool

Returns whether this feature is enabled in this feature set.

Source§

impl WasmFeatures

Source

pub const MVP: WasmFeatures = _

Available on crate feature features only.

The feature set associated with the MVP release of WebAssembly (its first release).

Source

pub const WASM1: WasmFeatures = _

Available on crate feature features only.

The feature set associated with the 1.0 version of the WebAssembly specification circa 2017.

https://webassembly.github.io/spec/versions/core/WebAssembly-1.0.pdf

Source

pub const WASM2: WasmFeatures = _

Available on crate feature features only.

The feature set associated with the 2.0 version of the WebAssembly specification circa 2022.

https://webassembly.github.io/spec/versions/core/WebAssembly-2.0.pdf

Source

pub const WASM3: WasmFeatures = _

Available on crate feature features only.

The feature set associated with the 3.0 version of the WebAssembly specification.

Note that as of the time of this writing the 3.0 version of the specification is not yet published. The precise set of features set here may change as that continues to evolve.

(draft) https://webassembly.github.io/spec/versions/core/WebAssembly-3.0-draft.pdf

Trait Implementations§

Source§

impl Binary for WasmFeatures

Source§

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

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

impl BitAnd for WasmFeatures

Source§

fn bitand(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

Source§

type Output = WasmFeatures

The resulting type after applying the & operator.
Source§

impl BitAndAssign for WasmFeatures

Source§

fn bitand_assign(&mut self, other: Self)

The bitwise and (&) of the bits in two flags values.

Source§

impl BitOr for WasmFeatures

Source§

fn bitor(self, other: WasmFeatures) -> Self

The bitwise or (|) of the bits in two flags values.

Source§

type Output = WasmFeatures

The resulting type after applying the | operator.
Source§

impl BitOrAssign for WasmFeatures

Source§

fn bitor_assign(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

Source§

impl BitXor for WasmFeatures

Source§

fn bitxor(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

Source§

type Output = WasmFeatures

The resulting type after applying the ^ operator.
Source§

impl BitXorAssign for WasmFeatures

Source§

fn bitxor_assign(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

Source§

impl Clone for WasmFeatures

Source§

fn clone(&self) -> WasmFeatures

Returns a copy 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 WasmFeatures

Source§

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

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

impl Default for WasmFeatures

Available on crate feature features only.
Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Extend<WasmFeatures> for WasmFeatures

Source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

The bitwise or (|) of the bits in each flags value.

Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl Flags for WasmFeatures

Source§

const FLAGS: &'static [Flag<WasmFeatures>] = _

The set of defined flags.
Source§

type Bits = u32

The underlying bits type.
Source§

fn bits(&self) -> u32

Get the underlying bits value. Read more
Source§

fn from_bits_retain(bits: u32) -> WasmFeatures

Convert from a bits value exactly.
Source§

fn empty() -> Self

Get a flags value with all bits unset.
Source§

fn all() -> Self

Get a flags value with all known bits set.
Source§

fn from_bits(bits: Self::Bits) -> Option<Self>

Convert from a bits value. Read more
Source§

fn from_bits_truncate(bits: Self::Bits) -> Self

Convert from a bits value, unsetting any unknown bits.
Source§

fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set. Read more
Source§

fn iter(&self) -> Iter<Self>

Yield a set of contained flags values. Read more
Source§

fn iter_names(&self) -> IterNames<Self>

Yield a set of contained named flags values. Read more
Source§

fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.
Source§

fn is_all(&self) -> bool

Whether all known bits in this flags value are set.
Source§

fn intersects(&self, other: Self) -> bool
where Self: Sized,

Whether any set bits in a source flags value are also set in a target flags value.
Source§

fn contains(&self, other: Self) -> bool
where Self: Sized,

Whether all set bits in a source flags value are also set in a target flags value.
Source§

fn insert(&mut self, other: Self)
where Self: Sized,

The bitwise or (|) of the bits in two flags values.
Source§

fn remove(&mut self, other: Self)
where Self: Sized,

The intersection of a source flags value with the complement of a target flags value (&!). Read more
Source§

fn toggle(&mut self, other: Self)
where Self: Sized,

The bitwise exclusive-or (^) of the bits in two flags values.
Source§

fn set(&mut self, other: Self, value: bool)
where Self: Sized,

Call Flags::insert when value is true or Flags::remove when value is false.
Source§

fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.
Source§

fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.
Source§

fn difference(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!). Read more
Source§

fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.
Source§

fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.
Source§

impl From<WasmFeatures> for WasmFeaturesInflated

Available on crate feature features only.
Source§

fn from(features: WasmFeatures) -> Self

Converts to this type from the input type.
Source§

impl From<WasmFeaturesInflated> for WasmFeatures

Available on crate feature features only.
Source§

fn from(inflated: WasmFeaturesInflated) -> Self

Converts to this type from the input type.
Source§

impl FromIterator<WasmFeatures> for WasmFeatures

Source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

The bitwise or (|) of the bits in each flags value.

Source§

impl Hash for WasmFeatures

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 IntoIterator for WasmFeatures

Source§

type Item = WasmFeatures

The type of the elements being iterated over.
Source§

type IntoIter = Iter<WasmFeatures>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl LowerHex for WasmFeatures

Source§

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

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

impl Not for WasmFeatures

Source§

fn not(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

Source§

type Output = WasmFeatures

The resulting type after applying the ! operator.
Source§

impl Octal for WasmFeatures

Source§

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

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

impl PartialEq for WasmFeatures

Source§

fn eq(&self, other: &WasmFeatures) -> 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 PublicFlags for WasmFeatures

Source§

type Primitive = u32

The type of the underlying storage.
Source§

type Internal = InternalBitFlags

The type of the internal field on the generated flags type.
Source§

impl Sub for WasmFeatures

Source§

fn sub(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

Source§

type Output = WasmFeatures

The resulting type after applying the - operator.
Source§

impl SubAssign for WasmFeatures

Source§

fn sub_assign(&mut self, other: Self)

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

Source§

impl UpperHex for WasmFeatures

Source§

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

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

impl Copy for WasmFeatures

Source§

impl Eq for WasmFeatures

Source§

impl StructuralPartialEq for WasmFeatures

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, dst: *mut T)

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

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

Source§

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

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

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

Source§

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

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

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

Source§

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, 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.