Element

Struct Element 

Source
pub struct Element { /* private fields */ }
Expand description

The initial contents of a table is uninitialized. Element segments can be used to initialize a subrange of a table from a static vector of elements. Each element segment defines a reference type and a corresponding list of constant element expressions. Element segments have a mode that identifies them as either passive, active, or declarative. A passive element segment’s elements can be copied to a table using the 𝗍𝖺𝖻𝗅𝖾.𝗂𝗇𝗂𝗍 instruction. An active element segment copies its elements into a table during instantiation, as specified by a table index and a constant expression defining an offset into that table. A declarative element segment is not available at runtime but merely serves to forward-declare references that are formed in code with instructions like 𝗋𝖾𝖿.𝖿𝗎𝗇𝖼. The 𝗈𝖿𝖿𝗌𝖾𝗍 is given by a constant expression. Element segments are referenced through element indices.

See https://webassembly.github.io/spec/core/syntax/modules.html#element-segments

§Examples

§Active

use wasm_ast::{Element, ElementInitializer, ElementMode, TableIndex, FunctionIndex, Expression, ReferenceType};

let offset: Expression = vec![0i32.into()].into();
let initializers = vec![0].to_initializers();
let element = Element::active(0, offset.clone(), ReferenceType::Function, initializers.clone());

assert_eq!(element, Element::new(
    ReferenceType::Function,
    ElementMode::Active(0, offset.clone()),
    initializers.clone()
));
assert_eq!(element.kind(), ReferenceType::Function);
assert_eq!(element.mode(), &ElementMode::Active(0, offset.clone()));
assert_eq!(element.initializers(), initializers.as_slice());

§Passive

use wasm_ast::{Element, ElementInitializer, ElementMode, TableIndex, Expression, ReferenceType, NumericInstruction};

let initializers = vec![Expression::from(vec![2i32.into()])].to_initializers();
let element = Element::passive(ReferenceType::External, initializers.clone());

assert_eq!(element, Element::new(
    ReferenceType::External,
    ElementMode::Passive,
    initializers.clone()
));
assert_eq!(element.kind(), ReferenceType::External);
assert_eq!(element.mode(), &ElementMode::Passive);
assert_eq!(element.initializers(), initializers.as_slice());

§Declarative

use wasm_ast::{Element, ElementInitializer, ElementMode, TableIndex, Expression, ReferenceType, NumericInstruction};

let initializer: Vec<Expression> = vec![Expression::from(vec![2i32.into()])].into();
let element = Element::declarative(ReferenceType::External, initializer.clone());

assert_eq!(element, Element::new(
    ReferenceType::External,
    ElementMode::Declarative,
    initializer.clone()
));
assert_eq!(element.kind(), ReferenceType::External);
assert_eq!(element.mode(), &ElementMode::Declarative);
assert_eq!(element.initializers(), &initializer);

Implementations§

Source§

impl Element

Source

pub fn new( kind: ReferenceType, mode: ElementMode, initializers: Vec<Expression>, ) -> Self

Creates a new instance of an element segment.

Source

pub fn passive(kind: ReferenceType, initializers: Vec<Expression>) -> Self

Creates a passive element segment.

Source

pub fn active( table: TableIndex, offset: Expression, kind: ReferenceType, initializers: Vec<Expression>, ) -> Self

Creates an active element segment.

Source

pub fn declarative(kind: ReferenceType, initializers: Vec<Expression>) -> Self

Creates a declarative element segment.

Source

pub fn kind(&self) -> ReferenceType

The reference type of the element segment.

Source

pub fn initializers(&self) -> &[Expression]

The initializer for the element segment.

Source

pub fn mode(&self) -> &ElementMode

The mode of the element segment.

Trait Implementations§

Source§

impl Clone for Element

Source§

fn clone(&self) -> Element

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 Element

Source§

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

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

impl PartialEq for Element

Source§

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

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