stable_mir::mir::body

Struct Body

source
pub struct Body {
    pub blocks: Vec<BasicBlock>,
    pub(super) locals: Vec<LocalDecl>,
    pub(super) arg_count: usize,
    pub var_debug_info: Vec<VarDebugInfo>,
    pub(super) spread_arg: Option<Local>,
    pub span: Span,
}
Expand description

The SMIR representation of a single function.

Fields§

§blocks: Vec<BasicBlock>§locals: Vec<LocalDecl>

Declarations of locals within the function.

The first local is the return value pointer, followed by arg_count locals for the function arguments, followed by any user-declared variables and temporaries.

§arg_count: usize

The number of arguments this function takes.

§var_debug_info: Vec<VarDebugInfo>

Debug information pertaining to user variables, including captures.

§spread_arg: Option<Local>

Mark an argument (which must be a tuple) as getting passed as its individual components.

This is used for the “rust-call” ABI such as closures.

§span: Span

The span that covers the entire function body.

Implementations§

source§

impl Body

source

pub fn new( blocks: Vec<BasicBlock>, locals: Vec<LocalDecl>, arg_count: usize, var_debug_info: Vec<VarDebugInfo>, spread_arg: Option<Local>, span: Span, ) -> Self

Constructs a Body.

A constructor is required to build a Body from outside the crate because the arg_count and locals fields are private.

source

pub fn ret_local(&self) -> &LocalDecl

Return local that holds this function’s return value.

source

pub fn arg_locals(&self) -> &[LocalDecl]

Locals in self that correspond to this function’s arguments.

source

pub fn inner_locals(&self) -> &[LocalDecl]

Inner locals for this function. These are the locals that are neither the return local nor the argument locals.

source

pub fn locals(&self) -> &[LocalDecl]

Convenience function to get all the locals in this function.

Locals are typically accessed via the more specific methods ret_local, arg_locals, and inner_locals.

source

pub fn local_decl(&self, local: Local) -> Option<&LocalDecl>

Get the local declaration for this local.

source

pub fn local_decls(&self) -> impl Iterator<Item = (Local, &LocalDecl)>

Get an iterator for all local declarations.

source

pub fn dump<W: Write>(&self, w: &mut W, fn_name: &str) -> Result<()>

Emit the body using the provided name for the signature.

source

pub fn spread_arg(&self) -> Option<Local>

Trait Implementations§

source§

impl Clone for Body

source§

fn clone(&self) -> Body

Returns a copy 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 Body

source§

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

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

impl Serialize for Body

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Body

§

impl RefUnwindSafe for Body

§

impl Send for Body

§

impl Sync for Body

§

impl Unpin for Body

§

impl UnwindSafe for Body

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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 104 bytes