Package it.unive.lisa.interprocedural
Class CFGResults<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<F>
-
- it.unive.lisa.analysis.lattices.FunctionalLattice<CFGResults<A,H,V,T>,ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>
-
- it.unive.lisa.interprocedural.CFGResults<A,H,V,T>
-
- Type Parameters:
A
- the type ofAbstractState
contained into the analysis stateH
- the type ofHeapDomain
contained into the computed abstract stateV
- the type ofValueDomain
contained into the computed abstract stateT
- the type ofTypeDomain
contained into the computed abstract state
- All Implemented Interfaces:
it.unive.lisa.analysis.Lattice<CFGResults<A,H,V,T>>
,java.lang.Iterable<java.util.Map.Entry<ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>>
public class CFGResults<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>> extends it.unive.lisa.analysis.lattices.FunctionalLattice<CFGResults<A,H,V,T>,ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>
AFunctionalLattice
fromContextSensitivityToken
s toCFGWithAnalysisResults
s. This class is meant to store fixpoint results on each token generated during the interprocedural analysis.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class it.unive.lisa.analysis.lattices.FunctionalLattice
it.unive.lisa.analysis.lattices.FunctionalLattice.FunctionalLift<V extends it.unive.lisa.analysis.Lattice<V>>, it.unive.lisa.analysis.lattices.FunctionalLattice.KeyFunctionalLift<K extends java.lang.Object>
-
-
Constructor Summary
Constructors Constructor Description CFGResults(it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T> lattice)
Builds a new result.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CFGResults<A,H,V,T>
bottom()
boolean
contains(ContextSensitivityToken token)
Yieldstrue
if a result exists for the giventoken
.java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>
getAll()
Yields all the results stored in this object, for any possibleContextSensitivityToken
used.CFGResults<A,H,V,T>
mk(it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T> lattice, java.util.Map<ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>> function)
org.apache.commons.lang3.tuple.Pair<java.lang.Boolean,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>
putResult(ContextSensitivityToken token, it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T> result)
Stores the result of a fixpoint computation on a cfg, if needed.CFGResults<A,H,V,T>
top()
-
Methods inherited from class it.unive.lisa.analysis.lattices.FunctionalLattice
equals, functionalLift, getKeys, getMap, getState, getValues, glbKeys, hashCode, isBottom, isTop, iterator, lessOrEqualAux, lubAux, lubKeys, mkNewFunction, putState, toString, wideningAux
-
-
-
-
Method Detail
-
putResult
public org.apache.commons.lang3.tuple.Pair<java.lang.Boolean,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>> putResult(ContextSensitivityToken token, it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T> result) throws it.unive.lisa.analysis.SemanticException
Stores the result of a fixpoint computation on a cfg, if needed. This method returns a pair of a boolean and aCFGWithAnalysisResults
, where (prev
is theCFGWithAnalysisResults
already present for the giventoken
):- if no
prev
was stored fortoken
, than that token is mapped toresult
and this method returns<false, result>
- if
prev <= result
, thentoken
is mapped toresult
and this method returns<true, result>
- if
result <= prev
, then the mapping is left untouched and this method returns<false, prev>
- otherwise,
token
is mapped tolub = prev.lub(result)
and this method returns<true, lub>
- Parameters:
token
- theContextSensitivityToken
that identifying the resultresult
- theCFGWithAnalysisResults
to store- Returns:
true
if the previous result has been updated, if any- Throws:
it.unive.lisa.analysis.SemanticException
- if something goes wrong during the update
- if no
-
contains
public boolean contains(ContextSensitivityToken token)
Yieldstrue
if a result exists for the giventoken
.- Parameters:
token
- theContextSensitivityToken
that identifying the result- Returns:
true
if that condition holds
-
getAll
public java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>> getAll()
Yields all the results stored in this object, for any possibleContextSensitivityToken
used.- Returns:
- the results
-
top
public CFGResults<A,H,V,T> top()
-
bottom
public CFGResults<A,H,V,T> bottom()
-
mk
public CFGResults<A,H,V,T> mk(it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T> lattice, java.util.Map<ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>> function)
- Specified by:
mk
in classit.unive.lisa.analysis.lattices.FunctionalLattice<CFGResults<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>,ContextSensitivityToken,it.unive.lisa.analysis.CFGWithAnalysisResults<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>>
-
-