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 ofAbstractStatecontained into the analysis stateH- the type ofHeapDomaincontained into the computed abstract stateV- the type ofValueDomaincontained into the computed abstract stateT- the type ofTypeDomaincontained 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>>
AFunctionalLatticefromContextSensitivityTokens toCFGWithAnalysisResultss. 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()booleancontains(ContextSensitivityToken token)Yieldstrueif 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 possibleContextSensitivityTokenused.booleanisBottom()booleanisTop()protected 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, 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 (previs theCFGWithAnalysisResultsalready present for the giventoken):- if no
prevwas stored fortoken, than that token is mapped toresultand this method returns<false, result> - if
prev <= result, thentokenis mapped toresultand this method returns<true, result> - if
result <= prev, then the mapping is left untouched and this method returns<false, prev> - otherwise,
tokenis mapped tolub = prev.lub(result)and this method returns<true, lub>
- Parameters:
token- theContextSensitivityTokenthat identifying the resultresult- theCFGWithAnalysisResultsto store- Returns:
trueif 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)
Yieldstrueif a result exists for the giventoken.- Parameters:
token- theContextSensitivityTokenthat identifying the result- Returns:
trueif 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 possibleContextSensitivityTokenused.- Returns:
- the results
-
top
public CFGResults<A,H,V,T> top()
-
isTop
public boolean isTop()
-
bottom
public CFGResults<A,H,V,T> bottom()
-
isBottom
public boolean isBottom()
-
mk
protected 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:
mkin 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>>>
-
-