[][src]Struct polonius_engine::AllFacts

pub struct AllFacts<T: FactTypes> {
    pub borrow_region: Vec<(T::Origin, T::Loan, T::Point)>,
    pub universal_region: Vec<T::Origin>,
    pub cfg_edge: Vec<(T::Point, T::Point)>,
    pub killed: Vec<(T::Loan, T::Point)>,
    pub outlives: Vec<(T::Origin, T::Origin, T::Point)>,
    pub invalidates: Vec<(T::Point, T::Loan)>,
    pub var_used: Vec<(T::Variable, T::Point)>,
    pub var_defined: Vec<(T::Variable, T::Point)>,
    pub var_drop_used: Vec<(T::Variable, T::Point)>,
    pub var_uses_region: Vec<(T::Variable, T::Origin)>,
    pub var_drops_region: Vec<(T::Variable, T::Origin)>,
    pub child: Vec<(T::Path, T::Path)>,
    pub path_belongs_to_var: Vec<(T::Path, T::Variable)>,
    pub initialized_at: Vec<(T::Path, T::Point)>,
    pub moved_out_at: Vec<(T::Path, T::Point)>,
    pub path_accessed_at: Vec<(T::Path, T::Point)>,
    pub known_subset: Vec<(T::Origin, T::Origin)>,
    pub placeholder: Vec<(T::Origin, T::Loan)>,
}

The "facts" which are the basis of the NLL borrow analysis.

Fields

borrow_region: Vec<(T::Origin, T::Loan, T::Point)>

borrow_region(origin, loan, point) -- the origin may refer to data from loan starting at point (this is usually the point after a borrow rvalue)

universal_region: Vec<T::Origin>

universal_region(origin) -- this is a "free region" within fn body

cfg_edge: Vec<(T::Point, T::Point)>

cfg_edge(point1, point2) for each edge point1 -> point2 in the control flow

killed: Vec<(T::Loan, T::Point)>

killed(loan, point) when some prefix of the path borrowed at loan is assigned at point

outlives: Vec<(T::Origin, T::Origin, T::Point)>

outlives(origin1, origin2, point) when we require origin1@point: origin2@point

invalidates: Vec<(T::Point, T::Loan)>

invalidates(point, loan) when the loan is invalidated at point

var_used: Vec<(T::Variable, T::Point)>

var_used(var, point) when the variable var is used for anything but a drop at point

var_defined: Vec<(T::Variable, T::Point)>

var_defined(var, point) when the variable var is overwritten at point

var_drop_used: Vec<(T::Variable, T::Point)>

var_used(var, point) when the variable var is used in a drop at point

var_uses_region: Vec<(T::Variable, T::Origin)>

var_uses_region(var, origin) when the type of var includes the origin

var_drops_region: Vec<(T::Variable, T::Origin)>

var_drops_region(var, origin) when the type of var includes the origin and uses it when dropping

child: Vec<(T::Path, T::Path)>

child(path1, path2) when the path path1 is the direct or transitive child of path2, e.g. child(x.y, x), child(x.y.z, x.y), child(x.y.z, x) would all be true if there was a path like x.y.z.

path_belongs_to_var: Vec<(T::Path, T::Variable)>

path_belongs_to_var(path, var) the root path path starting in variable var.

initialized_at: Vec<(T::Path, T::Point)>

initialized_at(path, point) when the path was initialized at point point. This fact is only emitted for a prefix path, and not for the implicit initialization of all of path's children. E.g. a statement like x.y = 3 at point would give the fact initialized_at(x.y, point) (but neither initialized_at(x.y.z, point) nor initialized_at(x, point)).

moved_out_at: Vec<(T::Path, T::Point)>

moved_out_at(path, point) when the path was moved at point. The same logic is applied as for initialized_at above.

path_accessed_at: Vec<(T::Path, T::Point)>

path_accessed_at(path, point) when the path was accessed at point point. The same logic as for initialized_at and moved_out_at applies.

known_subset: Vec<(T::Origin, T::Origin)>

These reflect the 'a: 'b relations that are either declared by the user on function declarations or which are inferred via implied bounds. For example: fn foo<'a, 'b: 'a, 'c>(x: &'c &'a u32) would have two entries:

  • one for the user-supplied subset 'b: 'a
  • and one for the 'a: 'c implied bound from the x parameter, (note that the transitive relation 'b: 'c is not necessarily included explicitly, but rather inferred by polonius).
placeholder: Vec<(T::Origin, T::Loan)>

placeholder(origin, loan) describes a placeholder origin, with its associated placeholder loan.

Trait Implementations

impl<T: Clone + FactTypes> Clone for AllFacts<T> where
    T::Origin: Clone,
    T::Loan: Clone,
    T::Point: Clone,
    T::Origin: Clone,
    T::Point: Clone,
    T::Point: Clone,
    T::Loan: Clone,
    T::Point: Clone,
    T::Origin: Clone,
    T::Origin: Clone,
    T::Point: Clone,
    T::Point: Clone,
    T::Loan: Clone,
    T::Variable: Clone,
    T::Point: Clone,
    T::Variable: Clone,
    T::Point: Clone,
    T::Variable: Clone,
    T::Point: Clone,
    T::Variable: Clone,
    T::Origin: Clone,
    T::Variable: Clone,
    T::Origin: Clone,
    T::Path: Clone,
    T::Path: Clone,
    T::Path: Clone,
    T::Variable: Clone,
    T::Path: Clone,
    T::Point: Clone,
    T::Path: Clone,
    T::Point: Clone,
    T::Path: Clone,
    T::Point: Clone,
    T::Origin: Clone,
    T::Origin: Clone,
    T::Origin: Clone,
    T::Loan: Clone
[src]

impl<T: FactTypes> Default for AllFacts<T>[src]

impl<T: Debug + FactTypes> Debug for AllFacts<T> where
    T::Origin: Debug,
    T::Loan: Debug,
    T::Point: Debug,
    T::Origin: Debug,
    T::Point: Debug,
    T::Point: Debug,
    T::Loan: Debug,
    T::Point: Debug,
    T::Origin: Debug,
    T::Origin: Debug,
    T::Point: Debug,
    T::Point: Debug,
    T::Loan: Debug,
    T::Variable: Debug,
    T::Point: Debug,
    T::Variable: Debug,
    T::Point: Debug,
    T::Variable: Debug,
    T::Point: Debug,
    T::Variable: Debug,
    T::Origin: Debug,
    T::Variable: Debug,
    T::Origin: Debug,
    T::Path: Debug,
    T::Path: Debug,
    T::Path: Debug,
    T::Variable: Debug,
    T::Path: Debug,
    T::Point: Debug,
    T::Path: Debug,
    T::Point: Debug,
    T::Path: Debug,
    T::Point: Debug,
    T::Origin: Debug,
    T::Origin: Debug,
    T::Origin: Debug,
    T::Loan: Debug
[src]

Auto Trait Implementations

impl<T> Send for AllFacts<T> where
    <T as FactTypes>::Loan: Send,
    <T as FactTypes>::Origin: Send,
    <T as FactTypes>::Path: Send,
    <T as FactTypes>::Point: Send,
    <T as FactTypes>::Variable: Send

impl<T> Sync for AllFacts<T> where
    <T as FactTypes>::Loan: Sync,
    <T as FactTypes>::Origin: Sync,
    <T as FactTypes>::Path: Sync,
    <T as FactTypes>::Point: Sync,
    <T as FactTypes>::Variable: Sync

impl<T> Unpin for AllFacts<T> where
    <T as FactTypes>::Loan: Unpin,
    <T as FactTypes>::Origin: Unpin,
    <T as FactTypes>::Path: Unpin,
    <T as FactTypes>::Point: Unpin,
    <T as FactTypes>::Variable: Unpin

impl<T> UnwindSafe for AllFacts<T> where
    <T as FactTypes>::Loan: UnwindSafe,
    <T as FactTypes>::Origin: UnwindSafe,
    <T as FactTypes>::Path: UnwindSafe,
    <T as FactTypes>::Point: UnwindSafe,
    <T as FactTypes>::Variable: UnwindSafe

impl<T> RefUnwindSafe for AllFacts<T> where
    <T as FactTypes>::Loan: RefUnwindSafe,
    <T as FactTypes>::Origin: RefUnwindSafe,
    <T as FactTypes>::Path: RefUnwindSafe,
    <T as FactTypes>::Point: RefUnwindSafe,
    <T as FactTypes>::Variable: RefUnwindSafe

Blanket Implementations

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

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

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

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

type Error = !

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.

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

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

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