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
impl WasmFeatures
Sourcepub const MUTABLE_GLOBAL: Self = _
pub const MUTABLE_GLOBAL: Self = _
The WebAssembly mutable-global
proposal.
Defaults to true
.
Sourcepub const SATURATING_FLOAT_TO_INT: Self = _
pub const SATURATING_FLOAT_TO_INT: Self = _
The WebAssembly saturating-float-to-int
proposal.
Defaults to true
.
Sourcepub const SIGN_EXTENSION: Self = _
pub const SIGN_EXTENSION: Self = _
The WebAssembly sign-extension-ops
proposal.
Defaults to true
.
Sourcepub const REFERENCE_TYPES: Self = _
pub const REFERENCE_TYPES: Self = _
The WebAssembly reference types proposal.
Defaults to true
.
Sourcepub const MULTI_VALUE: Self = _
pub const MULTI_VALUE: Self = _
The WebAssembly multi-value proposal.
Defaults to true
.
Sourcepub const BULK_MEMORY: Self = _
pub const BULK_MEMORY: Self = _
The WebAssembly bulk memory operations proposal.
Defaults to true
.
Sourcepub const RELAXED_SIMD: Self = _
pub const RELAXED_SIMD: Self = _
The WebAssembly Relaxed SIMD proposal.
Defaults to true
.
Sourcepub const SHARED_EVERYTHING_THREADS: Self = _
pub const SHARED_EVERYTHING_THREADS: Self = _
The WebAssembly shared-everything-threads proposal; includes new
component model built-ins.
Defaults to false
.
Sourcepub const FLOATS: Self = _
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
.
Sourcepub const MULTI_MEMORY: Self = _
pub const MULTI_MEMORY: Self = _
The WebAssembly multi memory proposal.
Defaults to true
.
Sourcepub const EXCEPTIONS: Self = _
pub const EXCEPTIONS: Self = _
The WebAssembly exception handling proposal.
Defaults to true
.
Sourcepub const EXTENDED_CONST: Self = _
pub const EXTENDED_CONST: Self = _
The WebAssembly extended_const proposal.
Defaults to true
.
Sourcepub const COMPONENT_MODEL: Self = _
pub const COMPONENT_MODEL: Self = _
The WebAssembly component model proposal.
Defaults to true
.
Sourcepub const FUNCTION_REFERENCES: Self = _
pub const FUNCTION_REFERENCES: Self = _
The WebAssembly typed function references proposal.
Defaults to true
.
Sourcepub const MEMORY_CONTROL: Self = _
pub const MEMORY_CONTROL: Self = _
The WebAssembly memory control proposal.
Defaults to false
.
Sourcepub const CUSTOM_PAGE_SIZES: Self = _
pub const CUSTOM_PAGE_SIZES: Self = _
The WebAssembly custom-page-sizes
proposal.
Defaults to false
.
Sourcepub const COMPONENT_MODEL_VALUES: Self = _
pub const COMPONENT_MODEL_VALUES: Self = _
Support for the value
type in the component model proposal.
Defaults to false
.
Sourcepub const COMPONENT_MODEL_NESTED_NAMES: Self = _
pub const COMPONENT_MODEL_NESTED_NAMES: Self = _
Support for the nested namespaces and projects in component model names.
Defaults to false
.
Sourcepub const COMPONENT_MODEL_MORE_FLAGS: Self = _
pub const COMPONENT_MODEL_MORE_FLAGS: Self = _
Support for more than 32 flags per-type in the component model.
Defaults to false
.
Sourcepub const COMPONENT_MODEL_MULTIPLE_RETURNS: Self = _
pub const COMPONENT_MODEL_MULTIPLE_RETURNS: Self = _
Support for multiple return values in a component model function.
Defaults to false
.
Sourcepub const LEGACY_EXCEPTIONS: Self = _
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
.
Sourcepub const GC_TYPES: Self = _
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
.
Sourcepub const STACK_SWITCHING: Self = _
pub const STACK_SWITCHING: Self = _
The WebAssembly stack-switching proposal.
Defaults to false
.
Sourcepub const WIDE_ARITHMETIC: Self = _
pub const WIDE_ARITHMETIC: Self = _
The WebAssembly wide-arithmetic proposal.
Defaults to false
.
Source§impl WasmFeatures
impl WasmFeatures
Sourcepub const fn bits(&self) -> u32
pub const fn bits(&self) -> u32
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u32) -> Option<Self>
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.
Sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u32) -> Self
pub const fn from_bits_retain(bits: u32) -> Self
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<Self>
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.
Sourcepub const fn intersects(&self, other: Self) -> bool
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.
Sourcepub const fn contains(&self, other: Self) -> bool
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.
Sourcepub fn remove(&mut self, other: Self)
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.
Sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert
when value
is true
or remove
when value
is false
.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&
) of the bits in two flags values.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|
) of the bits in two flags values.
Sourcepub const fn difference(self, other: Self) -> Self
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.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^
) of the bits in two flags values.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!
) of the bits in a flags value, truncating the result.
Source§impl WasmFeatures
impl WasmFeatures
Sourcepub const fn iter(&self) -> Iter<WasmFeatures>
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.
Sourcepub const fn iter_names(&self) -> IterNames<WasmFeatures>
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
impl WasmFeatures
Sourcepub fn from_inflated(inflated: WasmFeaturesInflated) -> Self
Available on crate feature features
only.
pub fn from_inflated(inflated: WasmFeaturesInflated) -> Self
features
only.Construct a bit-packed WasmFeatures
from the inflated struct version.
Sourcepub fn inflate(&self) -> WasmFeaturesInflated
Available on crate feature features
only.
pub fn inflate(&self) -> WasmFeaturesInflated
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.
Sourcepub fn mutable_global(&self) -> bool
pub fn mutable_global(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn saturating_float_to_int(&self) -> bool
pub fn saturating_float_to_int(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn sign_extension(&self) -> bool
pub fn sign_extension(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn reference_types(&self) -> bool
pub fn reference_types(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn multi_value(&self) -> bool
pub fn multi_value(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn bulk_memory(&self) -> bool
pub fn bulk_memory(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn relaxed_simd(&self) -> bool
pub fn relaxed_simd(&self) -> bool
Returns whether this feature is enabled in this feature set.
Returns whether this feature is enabled in this feature set.
Sourcepub fn multi_memory(&self) -> bool
pub fn multi_memory(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn exceptions(&self) -> bool
pub fn exceptions(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn extended_const(&self) -> bool
pub fn extended_const(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn component_model(&self) -> bool
pub fn component_model(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn function_references(&self) -> bool
pub fn function_references(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn memory_control(&self) -> bool
pub fn memory_control(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn custom_page_sizes(&self) -> bool
pub fn custom_page_sizes(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn component_model_values(&self) -> bool
pub fn component_model_values(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn component_model_nested_names(&self) -> bool
pub fn component_model_nested_names(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn component_model_more_flags(&self) -> bool
pub fn component_model_more_flags(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn component_model_multiple_returns(&self) -> bool
pub fn component_model_multiple_returns(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn legacy_exceptions(&self) -> bool
pub fn legacy_exceptions(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn stack_switching(&self) -> bool
pub fn stack_switching(&self) -> bool
Returns whether this feature is enabled in this feature set.
Sourcepub fn wide_arithmetic(&self) -> bool
pub fn wide_arithmetic(&self) -> bool
Returns whether this feature is enabled in this feature set.
Source§impl WasmFeatures
impl WasmFeatures
Sourcepub const MVP: WasmFeatures = _
Available on crate feature features
only.
pub const MVP: WasmFeatures = _
features
only.The feature set associated with the MVP release of WebAssembly (its first release).
Sourcepub const WASM1: WasmFeatures = _
Available on crate feature features
only.
pub const WASM1: WasmFeatures = _
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
Sourcepub const WASM2: WasmFeatures = _
Available on crate feature features
only.
pub const WASM2: WasmFeatures = _
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
Sourcepub const WASM3: WasmFeatures = _
Available on crate feature features
only.
pub const WASM3: WasmFeatures = _
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
impl Binary for WasmFeatures
Source§impl BitAnd for WasmFeatures
impl BitAnd for WasmFeatures
Source§impl BitAndAssign for WasmFeatures
impl BitAndAssign for WasmFeatures
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&
) of the bits in two flags values.
Source§impl BitOr for WasmFeatures
impl BitOr for WasmFeatures
Source§fn bitor(self, other: WasmFeatures) -> Self
fn bitor(self, other: WasmFeatures) -> Self
The bitwise or (|
) of the bits in two flags values.
Source§type Output = WasmFeatures
type Output = WasmFeatures
|
operator.Source§impl BitOrAssign for WasmFeatures
impl BitOrAssign for WasmFeatures
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|
) of the bits in two flags values.
Source§impl BitXor for WasmFeatures
impl BitXor for WasmFeatures
Source§impl BitXorAssign for WasmFeatures
impl BitXorAssign for WasmFeatures
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
Source§impl Clone for WasmFeatures
impl Clone for WasmFeatures
Source§fn clone(&self) -> WasmFeatures
fn clone(&self) -> WasmFeatures
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for WasmFeatures
impl Debug for WasmFeatures
Source§impl Default for WasmFeatures
Available on crate feature features
only.
impl Default for WasmFeatures
features
only.Source§impl Extend<WasmFeatures> for WasmFeatures
impl Extend<WasmFeatures> for WasmFeatures
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
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)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl Flags for WasmFeatures
impl Flags for WasmFeatures
Source§const FLAGS: &'static [Flag<WasmFeatures>] = _
const FLAGS: &'static [Flag<WasmFeatures>] = _
Source§fn from_bits_retain(bits: u32) -> WasmFeatures
fn from_bits_retain(bits: u32) -> WasmFeatures
Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|
) of the bits in two flags values.Source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!
). Read moreSource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^
) of the bits in two flags values.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&
) of the bits in two flags values.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!
). Read moreSource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^
) of the bits in two flags values.Source§fn complement(self) -> Self
fn complement(self) -> Self
!
) of the bits in a flags value, truncating the result.Source§impl From<WasmFeatures> for WasmFeaturesInflated
Available on crate feature features
only.
impl From<WasmFeatures> for WasmFeaturesInflated
features
only.Source§fn from(features: WasmFeatures) -> Self
fn from(features: WasmFeatures) -> Self
Source§impl From<WasmFeaturesInflated> for WasmFeatures
Available on crate feature features
only.
impl From<WasmFeaturesInflated> for WasmFeatures
features
only.Source§fn from(inflated: WasmFeaturesInflated) -> Self
fn from(inflated: WasmFeaturesInflated) -> Self
Source§impl FromIterator<WasmFeatures> for WasmFeatures
impl FromIterator<WasmFeatures> for WasmFeatures
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
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
impl Hash for WasmFeatures
Source§impl IntoIterator for WasmFeatures
impl IntoIterator for WasmFeatures
Source§impl LowerHex for WasmFeatures
impl LowerHex for WasmFeatures
Source§impl Not for WasmFeatures
impl Not for WasmFeatures
Source§impl Octal for WasmFeatures
impl Octal for WasmFeatures
Source§impl PartialEq for WasmFeatures
impl PartialEq for WasmFeatures
Source§impl PublicFlags for WasmFeatures
impl PublicFlags for WasmFeatures
Source§impl Sub for WasmFeatures
impl Sub for WasmFeatures
Source§fn sub(self, other: Self) -> Self
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
type Output = WasmFeatures
-
operator.Source§impl SubAssign for WasmFeatures
impl SubAssign for WasmFeatures
Source§fn sub_assign(&mut self, other: Self)
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
impl UpperHex for WasmFeatures
impl Copy for WasmFeatures
impl Eq for WasmFeatures
impl StructuralPartialEq for WasmFeatures
Auto Trait Implementations§
impl Freeze for WasmFeatures
impl RefUnwindSafe for WasmFeatures
impl Send for WasmFeatures
impl Sync for WasmFeatures
impl Unpin for WasmFeatures
impl UnwindSafe for WasmFeatures
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§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.