pub struct FuncValidator<T> { /* private fields */ }
Expand description

Validation context for a WebAssembly function.

This structure is created by Validator::code_section_entry and is created per-function in a WebAssembly module. This structure is suitable for sending to other threads while the original Validator continues processing other functions.

Implementations§

source§

impl<T: WasmModuleResources> FuncValidator<T>

source

pub fn new( ty: u32, offset: usize, resources: T, features: &WasmFeatures ) -> Result<FuncValidator<T>>

Creates a new FuncValidator.

The returned FuncValidator can be used to validate a function with the type ty specified. The resources indicate what the containing module has for the function to use, and the features configure what WebAssembly proposals are enabled for this function.

The returned validator can be used to then parse a FunctionBody, for example, to read locals and validate operators.

source

pub fn operand_stack_height(&self) -> u32

Get the current height of the operand stack.

This returns the height of the whole operand stack for this function, not just for the current control frame.

source

pub fn validate(&mut self, body: &FunctionBody<'_>) -> Result<()>

Convenience function to validate an entire function’s body.

You may not end up using this in final implementations because you’ll often want to interleave validation with parsing.

source

pub fn read_locals(&mut self, reader: &mut BinaryReader<'_>) -> Result<()>

Reads the local defintions from the given BinaryReader, often sourced from a FunctionBody.

This function will automatically advance the BinaryReader forward, leaving reading operators up to the caller afterwards.

source

pub fn define_locals( &mut self, offset: usize, count: u32, ty: Type ) -> Result<()>

Defines locals into this validator.

This should be used if the application is already reading local definitions and there’s no need to re-parse the function again.

source

pub fn op(&mut self, offset: usize, operator: &Operator<'_>) -> Result<()>

Validates the next operator in a function.

This functions is expected to be called once-per-operator in a WebAssembly function. Each operator’s offset in the original binary and the operator itself are passed to this function to provide more useful error messages.

source

pub fn finish(&mut self, offset: usize) -> Result<()>

Function that must be called after the last opcode has been processed.

This will validate that the function was properly terminated with the end opcode. If this function is not called then the function will not be properly validated.

The offset provided to this function will be used as a position for an error if validation fails.

source

pub fn resources(&self) -> &T

Returns the underlying module resources that this validator is using.

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for FuncValidator<T>where T: RefUnwindSafe,

§

impl<T> Send for FuncValidator<T>where T: Send,

§

impl<T> Sync for FuncValidator<T>where T: Sync,

§

impl<T> Unpin for FuncValidator<T>where T: Unpin,

§

impl<T> UnwindSafe for FuncValidator<T>where T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.