[][src]Struct isla_lib::ir::SharedState

pub struct SharedState<'ir, B> {
    pub functions: HashMap<Name, (Vec<(Name, &'ir Ty<Name>)>, Ty<Name>, &'ir [Instr<Name, B>])>,
    pub symtab: Symtab<'ir>,
    pub structs: HashMap<Name, HashMap<Name, Ty<Name>>>,
    pub enums: HashMap<Name, HashSet<Name>>,
    pub enum_members: HashMap<Name, (usize, usize)>,
    pub union_ctors: HashSet<Name>,
    pub probes: HashSet<Name>,
}

All symbolic evaluation happens over some (immutable) IR. The SharedState provides each worker that is performing symbolic evaluation with a convenient view into that IR.

Fields

functions: HashMap<Name, (Vec<(Name, &'ir Ty<Name>)>, Ty<Name>, &'ir [Instr<Name, B>])>

A map from function identifers to function bodies and parameter lists

symtab: Symtab<'ir>

The symbol table for the IR

structs: HashMap<Name, HashMap<Name, Ty<Name>>>

A map from struct identifers to a map from field identifiers to their types

enums: HashMap<Name, HashSet<Name>>

A map from enum identifiers to sets of their member identifiers

enum_members: HashMap<Name, (usize, usize)>

enum_members maps each enum member for every enum to it's position (as a (pos, size) pair, i.e. 1 of 3) within its respective enum

union_ctors: HashSet<Name>

union_ctors is a set of all union constructor identifiers

probes: HashSet<Name>

probes is a set of function/location identifers to trace

Implementations

impl<'ir, B: BV> SharedState<'ir, B>[src]

pub fn new(
    symtab: Symtab<'ir>,
    defs: &'ir [Def<Name, B>],
    probes: HashSet<Name>
) -> Self
[src]

pub fn enum_member_from_str(&self, member: &str) -> Option<usize>[src]

pub fn enum_member(&self, member: Name) -> Option<usize>[src]

Auto Trait Implementations

impl<'ir, B> RefUnwindSafe for SharedState<'ir, B>

impl<'ir, B> Send for SharedState<'ir, B>

impl<'ir, B> Sync for SharedState<'ir, B>

impl<'ir, B> Unpin for SharedState<'ir, B>

impl<'ir, B> UnwindSafe for SharedState<'ir, B>

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<T> Same<T> for T

type Output = T

Should always be Self

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.