Struct haybale::ExecutionManager[][src]

pub struct ExecutionManager<'p, B: Backend> { /* fields omitted */ }

An ExecutionManager allows you to symbolically explore executions of a function. Conceptually, it is an Iterator over possible paths through the function. Calling next() on an ExecutionManager explores another possible path, returning either an Ok with a ReturnValue representing the function's symbolic return value at the end of that path, or an Err if an error was encountered while processing the path.

Importantly, after any call to next() (whether it results in an Ok or an Err), you can access the State resulting from the end of that path using the state() or mut_state() methods.

To get detailed information about an Err returned from a path, you can use state().full_error_message_with_context().

When next() returns None, there are no more possible paths through the function.

Implementations

impl<'p, B: Backend> ExecutionManager<'p, B>[src]

pub fn func(&self) -> &'p Function[src]

Reference to the Function which the ExecutionManager is managing symbolic execution of. (This is the top-level function, i.e., the function we started the analysis in.)

pub fn state(&self) -> &State<'p, B>[src]

Provides access to the State resulting from the end of the most recently explored path (or, if next() has never been called on this ExecutionManager, then simply the initial State which was passed in).

pub fn mut_state(&mut self) -> &mut State<'p, B>[src]

Provides mutable access to the underlying State (see notes on state()). Changes made to the initial state (before the first call to next()) are "sticky", and will persist through all executions of the function. However, changes made to a final state (after a call to next()) will be completely wiped away the next time that next() is called.

pub fn param_bvs(&self) -> &Vec<B::BV>[src]

Provides access to the BV objects representing each of the function's parameters

Trait Implementations

impl<'p, B: Backend> Iterator for ExecutionManager<'p, B> where
    B: 'p, 
[src]

type Item = Result<ReturnValue<B::BV>>

The type of the elements being iterated over.

Auto Trait Implementations

impl<'p, B> !RefUnwindSafe for ExecutionManager<'p, B>[src]

impl<'p, B> !Send for ExecutionManager<'p, B>[src]

impl<'p, B> !Sync for ExecutionManager<'p, B>[src]

impl<'p, B> Unpin for ExecutionManager<'p, B> where
    <B as Backend>::BV: Unpin,
    <B as Backend>::Memory: Unpin,
    <B as Backend>::SolverRef: Unpin
[src]

impl<'p, B> !UnwindSafe for ExecutionManager<'p, B>[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T> Itertools for T where
    T: Iterator + ?Sized
[src]

impl<T, I> Reduce<T> for I where
    I: Iterator<Item = T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.