Skip to main content

Unsupported

Enum Unsupported 

Source
pub enum Unsupported {
    Inst {
        inst: Inst,
        term: Option<&'static str>,
        opcode: Opcode,
        ty: Option<Type>,
    },
    Argument {
        index: usize,
        missing: Missing,
    },
    Call {
        inst: Inst,
        refused: Refused,
    },
    Indirect {
        inst: Inst,
    },
    Dynamic {
        inst: Inst,
    },
}
Expand description

Why a function could not be lowered.

One reason and then nothing. A function with no rule for something in it is a function this cannot finish, and the second thing it could not lower is not news.

Variants§

§

Inst

An instruction no rule fires on.

Fields

§inst: Inst

The instruction that stopped it.

§term: Option<&'static str>

What the rule file would call it, or nothing if the rule language has no name for it at all, which is what an instruction at a width nothing is written about looks like.

§opcode: Opcode

The opcode, which is what gets named when the rule language has no word for it.

An opcode the rule language has no word for is exactly the opcode no rule lowers, so without this the message would be empty in every case where somebody needs it.

§ty: Option<Type>

What it produces, or nothing for an instruction that is only an effect.

§

Argument

A parameter that does not arrive somewhere this can bring it in from.

Not an instruction, which is why it is a separate arm: it is a fact about the signature and there is nothing in the body of the function to point at.

Fields

§index: usize

Its position in the signature.

§missing: Missing

What is wrong with where it arrives.

§

Call

A call that passes or gives back a value this cannot put where the convention wants it.

Fields

§inst: Inst

The call.

§refused: Refused

Which value, and what is wrong with where it travels.

§

Indirect

A call through an address rather than to a name.

The address is a value in a register and the instruction that calls one is a different instruction, which nothing describes yet.

Fields

§inst: Inst

The call.

§

Dynamic

A stack slot whose size is not known until the function runs, which is what a variable length array is.

Not an instruction no rule covers. Growing the stack where the declaration stands is arithmetic on the stack pointer, and everything else in the frame then has to be reached through a frame pointer instead, and neither of those is a term a rule could be written about or a thing the frame here knows how to lay out.

Fields

§inst: Inst

The alloca.

Implementations§

Source§

impl Unsupported

Source

pub fn inst(&self) -> Option<Inst>

The instruction it is about, or nothing for the one arm that is about a signature.

What a caller wants this for is the span. The function knows where every instruction in it came from, so a caller holding both can point a message at the line somebody wrote rather than at the file as a whole, and nothing here has to carry a span of its own.

Trait Implementations§

Source§

impl Clone for Unsupported

Source§

fn clone(&self) -> Unsupported

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 Debug for Unsupported

Source§

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

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

impl Display for Unsupported

Source§

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

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

impl Eq for Unsupported

Source§

impl Error for Unsupported

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 Unsupported

Source§

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

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.