pub enum NodeValue<T: PartialEq + Eq + Clone> {
Value(T),
CallFlowCombinator {
call_stub: Option<T>,
interprocedural_flow: Option<T>,
},
}
Expand description
NodeValue that can either be a single abstract value or a composition of the abstract value computed following an interprocedural call in the graph and of the abstract value before or after the call (depending on the direction of the fixpoint analysis). The CallFlowCombinator then allows for a merge of the values computed over both paths.
The call_stub value will either be transferred from the callsite to the return site in a forward analysis or the other way around in a backward analysis.
The interprocedural_flow value will either be transferred from the end of the called subroutine to the return site in case of a forward analysis or from the beginning of the called subroutine to the callsite in a backward analysis.
Variants§
Value(T)
A single abstract value
CallFlowCombinator
Fields
The value saved at artificial combinator nodes.
Implementations§
Trait Implementations§
source§impl<'de, T> Deserialize<'de> for NodeValue<T>
impl<'de, T> Deserialize<'de> for NodeValue<T>
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<T: PartialEq + PartialEq + Eq + Clone> PartialEq for NodeValue<T>
impl<T: PartialEq + PartialEq + Eq + Clone> PartialEq for NodeValue<T>
impl<T: Eq + PartialEq + Eq + Clone> Eq for NodeValue<T>
impl<T: PartialEq + Eq + Clone> StructuralEq for NodeValue<T>
impl<T: PartialEq + Eq + Clone> StructuralPartialEq for NodeValue<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for NodeValue<T>where
T: RefUnwindSafe,
impl<T> Send for NodeValue<T>where
T: Send,
impl<T> Sync for NodeValue<T>where
T: Sync,
impl<T> Unpin for NodeValue<T>where
T: Unpin,
impl<T> UnwindSafe for NodeValue<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.