Skip to main content

BuildError

Enum BuildError 

Source
#[non_exhaustive]
pub enum BuildError {
Show 17 variants UnboundLabel { func: FuncId, label: u32, }, LabelRebound { func: FuncId, label: u32, }, ForeignLabel { func: FuncId, }, TargetOutOfRange { func: FuncId, target: u32, }, InvalidRange { func: FuncId, }, TooMany { func: FuncId, what: &'static str, }, UnknownRegister { func: FuncId, reg: Reg, }, PromoteNotDynamic { func: FuncId, pc: u32, }, ConflictingMoves { func: FuncId, dst: Reg, }, InvalidParams { owner: Callee, error: ParamError, }, InvalidShape { func: FuncId, error: ShapeError, }, ForeignFunction(FuncId), UndefinedFunction(FuncId), UndefinedType(TypeId), ConstForwardRef(ConstId), ModuleFull(&'static str), TooLarge { section: u32, },
}
Expand description

Why a function or module could not be built.

§Examples

use bytecode_lang::{BuildError, ModuleBuilder};

let mut m = ModuleBuilder::new();
let mut f = m.function("f", &[], &[]);
let nowhere = f.label();
f.jmp(nowhere); // never bound
let err = m.add_function(f).unwrap_err();
assert!(matches!(err, BuildError::UnboundLabel { .. }));

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

UnboundLabel

A branch, table, handler, or local uses a label that was never bound.

Fields

§func: FuncId

The function.

§label: u32

The label’s number within the function.

§

LabelRebound

A label was bound twice.

Fields

§func: FuncId

The function.

§label: u32

The label’s number within the function.

§

ForeignLabel

A label made by another function’s builder was used.

Fields

§func: FuncId

The function whose builder saw the label.

§

TargetOutOfRange

A branch target is not an instruction of the function: an emitted instruction names a target past the end, or a label used by a branch is bound after the last instruction.

Fields

§func: FuncId

The function.

§target: u32

The target.

§

InvalidRange

A try region or local range ends before it starts.

Fields

§func: FuncId

The function.

§

TooMany

A per-function table is full: registers, captures, name refs, or type refs (65,536 each), parameters (255), or instructions, jump tables, handlers (u32::MAX).

Fields

§func: FuncId

The function.

§what: &'static str

Which table: "registers", "captures", …

§

UnknownRegister

A register was named that the function never declared.

Fields

§func: FuncId

The function.

§reg: Reg

The register.

§

PromoteNotDynamic

An instruction with overflow = promote writes a register declared with a static type. promote produces an f64 where an integer does not fit, so its result must be dyn (OPS §2).

Fields

§func: FuncId

The function.

§pc: u32

The instruction’s pc.

§

ConflictingMoves

Two moves of one parallel move write the same register.

Fields

§func: FuncId

The function.

§dst: Reg

The register written twice.

§

InvalidParams

A function’s or an import’s ParamList breaks a rule of its own or does not fit its signature.

Fields

§owner: Callee

The function or import.

§error: ParamError

What is wrong.

§

InvalidShape

A CallShape is malformed.

Fields

§func: FuncId

The function.

§error: ShapeError

What is wrong.

§

ForeignFunction(FuncId)

A function builder does not belong to this module builder, or was already added.

§

UndefinedFunction(FuncId)

A declared function was never added.

§

UndefinedType(TypeId)

A reserved type was never defined.

§

ConstForwardRef(ConstId)

An aggregate constant refers to itself or a later constant.

§

ModuleFull(&'static str)

A module-level table would pass u32::MAX entries or bytes (what names it).

§

TooLarge

An encoded section would exceed 4 GiB, which its length field cannot express.

Fields

§section: u32

The section id (see specs/LSB.md §6).

Trait Implementations§

Source§

impl Clone for BuildError

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for BuildError

Source§

impl Debug for BuildError

Source§

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

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

impl Display for BuildError

Source§

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

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

impl Eq for BuildError

Source§

impl Error for BuildError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for BuildError

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for BuildError

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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.