pub enum Node<'a> {
    BlkStart(&'a Term<Blk>, &'a Term<Sub>),
    BlkEnd(&'a Term<Blk>, &'a Term<Sub>),
    CallReturn {
        call: (&'a Term<Blk>, &'a Term<Sub>),
        return_: (&'a Term<Blk>, &'a Term<Sub>),
    },
    CallSource {
        source: (&'a Term<Blk>, &'a Term<Sub>),
        target: (&'a Term<Blk>, &'a Term<Sub>),
    },
}
Expand description

The node type of an interprocedural control flow graph

Each node carries a pointer to its associated block with it. For CallReturnnodes the associated blocks are both the CallSourceblock (containing the call instruction) and the returning-from block (containing the return instruction).

For CallSourcenodes the associated block is the callsite block (source) and the target block of the call.

Basic blocks are allowed to be contained in more than one Sub. In the control flow graph such basic blocks occur once per subroutine they are contained in. For this reason, the nodes also carry a pointer to the corresponding subroutine with them to allow unambigous node identification.

Variants§

§

BlkStart(&'a Term<Blk>, &'a Term<Sub>)

A node corresponding to the start of a basic block, i.e. to the point in time just before the execution of the block.

§

BlkEnd(&'a Term<Blk>, &'a Term<Sub>)

A node corresponding to the end of the basic block, i.e. to the point in time just after the execution of all Def instructions in the block but before execution of the jump instructions at the end of the block.

§

CallReturn

Fields

§call: (&'a Term<Blk>, &'a Term<Sub>)

The block containing the callsite of the call.

§return_: (&'a Term<Blk>, &'a Term<Sub>)

The block that the called functions returns to.

An artificial node. See the module-level documentation for more information.

§

CallSource

Fields

§source: (&'a Term<Blk>, &'a Term<Sub>)

The block containing the callsite of the call

§target: (&'a Term<Blk>, &'a Term<Sub>)

The block containing the target of the call, i.e. the first block of the target function.

An artificial node. See the module-level documentation for more information.

Implementations§

source§

impl<'a> Node<'a>

source

pub fn get_block(&self) -> &'a Term<Blk>

Get the block corresponding to the node for BlkStart and BlkEnd nodes. panics if called on a CallReturn node.

source

pub fn get_sub(&self) -> &'a Term<Sub>

Get the sub corresponding to the node for BlkStart and BlkEnd nodes. panics if called on a CallReturn node.

Trait Implementations§

source§

impl<'a> Clone for Node<'a>

source§

fn clone(&self) -> Node<'a>

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<'a> Debug for Node<'a>

source§

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

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

impl<'a> Display for Node<'a>

source§

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

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

impl<'a> Hash for Node<'a>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'a> PartialEq for Node<'a>

source§

fn eq(&self, other: &Node<'a>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'a> Serialize for Node<'a>

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
source§

impl<'a> Copy for Node<'a>

source§

impl<'a> Eq for Node<'a>

source§

impl<'a> StructuralEq for Node<'a>

source§

impl<'a> StructuralPartialEq for Node<'a>

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for Node<'a>

§

impl<'a> Send for Node<'a>

§

impl<'a> Sync for Node<'a>

§

impl<'a> Unpin for Node<'a>

§

impl<'a> UnwindSafe for Node<'a>

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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,

§

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§

default 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>,

§

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

§

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.