Package it.unive.lisa.interprocedural
Class ModularWorstCaseAnalysis<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.interprocedural.ModularWorstCaseAnalysis<A,H,V,T>
-
- Type Parameters:
A
- the abstract state of the analysisH
- the heap domainV
- the value domainT
- the type domain
- All Implemented Interfaces:
it.unive.lisa.interprocedural.InterproceduralAnalysis<A,H,V,T>
public class ModularWorstCaseAnalysis<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 java.lang.Object implements it.unive.lisa.interprocedural.InterproceduralAnalysis<A,H,V,T>
A worst case modular analysis were all cfg calls are treated as open calls.
-
-
Constructor Summary
Constructors Constructor Description ModularWorstCaseAnalysis()
Builds the interprocedural analysis.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
fixpoint(it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, java.lang.Class<? extends it.unive.lisa.util.collections.workset.WorkingSet<it.unive.lisa.program.cfg.statement.Statement>> fixpointWorkingSet, int wideningThreshold)
it.unive.lisa.analysis.AnalysisState<A,H,V,T>
getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.CFGCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions)
it.unive.lisa.analysis.AnalysisState<A,H,V,T>
getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.OpenCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions)
java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>>
getAnalysisResultsOf(it.unive.lisa.program.cfg.CFG cfg)
void
init(it.unive.lisa.program.Application app, it.unive.lisa.interprocedural.callgraph.CallGraph callgraph, it.unive.lisa.interprocedural.OpenCallPolicy policy)
it.unive.lisa.program.cfg.statement.call.Call
resolve(it.unive.lisa.program.cfg.statement.call.UnresolvedCall call, java.util.Set<it.unive.lisa.type.Type>[] types, it.unive.lisa.analysis.symbols.SymbolAliasing aliasing)
-
-
-
Method Detail
-
fixpoint
public void fixpoint(it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, java.lang.Class<? extends it.unive.lisa.util.collections.workset.WorkingSet<it.unive.lisa.program.cfg.statement.Statement>> fixpointWorkingSet, int wideningThreshold) throws it.unive.lisa.util.datastructures.graph.algorithms.FixpointException
- Specified by:
fixpoint
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
- Throws:
it.unive.lisa.util.datastructures.graph.algorithms.FixpointException
-
getAnalysisResultsOf
public java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,H,V,T>> getAnalysisResultsOf(it.unive.lisa.program.cfg.CFG cfg)
- Specified by:
getAnalysisResultsOf
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
-
getAbstractResultOf
public it.unive.lisa.analysis.AnalysisState<A,H,V,T> getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.CFGCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions) throws it.unive.lisa.analysis.SemanticException
- Specified by:
getAbstractResultOf
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
getAbstractResultOf
public it.unive.lisa.analysis.AnalysisState<A,H,V,T> getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.OpenCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions) throws it.unive.lisa.analysis.SemanticException
- Specified by:
getAbstractResultOf
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
init
public void init(it.unive.lisa.program.Application app, it.unive.lisa.interprocedural.callgraph.CallGraph callgraph, it.unive.lisa.interprocedural.OpenCallPolicy policy) throws it.unive.lisa.interprocedural.InterproceduralAnalysisException
- Specified by:
init
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
- Throws:
it.unive.lisa.interprocedural.InterproceduralAnalysisException
-
resolve
public it.unive.lisa.program.cfg.statement.call.Call resolve(it.unive.lisa.program.cfg.statement.call.UnresolvedCall call, java.util.Set<it.unive.lisa.type.Type>[] types, it.unive.lisa.analysis.symbols.SymbolAliasing aliasing) throws it.unive.lisa.interprocedural.callgraph.CallResolutionException
- Specified by:
resolve
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<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>>
- Throws:
it.unive.lisa.interprocedural.callgraph.CallResolutionException
-
-