V
- the abstract value type to be tracked by the analysisS
- the store type used in the analysisT
- the transfer function type that is used to approximated runtime behaviorpublic interface Analysis<V extends AbstractValue<V>,S extends Store<S>,T extends TransferFunction<V,S>>
Modifier and Type | Interface and Description |
---|---|
static class |
Analysis.BeforeOrAfter
In calls to
Analysis#runAnalysisFor , whether to return the store before or after the
given node. |
static class |
Analysis.Direction
The direction of an analysis instance.
|
Modifier and Type | Method and Description |
---|---|
Analysis.Direction |
getDirection()
Get the direction of this analysis.
|
S |
getExceptionalExitStore()
Returns the exceptional exit store.
|
@Nullable TransferInput<V,S> |
getInput(Block b)
Get the transfer input of a given
Block b. |
S |
getRegularExitStore()
Returns the regular exit store, or
null , if there is no such store (because the method
cannot exit through the regular exit block). |
AnalysisResult<V,S> |
getResult()
The result of running the analysis.
|
T |
getTransferFunction()
Get the transfer function of this analysis.
|
V |
getValue(Node n)
|
V |
getValue(Tree t)
|
boolean |
isRunning()
Is the analysis currently running?
|
void |
performAnalysis(ControlFlowGraph cfg)
Perform the actual analysis.
|
void |
performAnalysisBlock(Block b)
Perform the actual analysis on one block.
|
S |
runAnalysisFor(Node node,
Analysis.BeforeOrAfter preOrPost,
TransferInput<V,S> blockTransferInput,
IdentityHashMap<Node,V> nodeValues,
Map<TransferInput<V,S>,IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)
Runs the analysis again within the block of
node and returns the store at the location
of node . |
Analysis.Direction getDirection()
boolean isRunning()
void performAnalysis(ControlFlowGraph cfg)
cfg
- the control flow graphvoid performAnalysisBlock(Block b)
b
- the block to analyzeS runAnalysisFor(Node node, Analysis.BeforeOrAfter preOrPost, TransferInput<V,S> blockTransferInput, IdentityHashMap<Node,V> nodeValues, Map<TransferInput<V,S>,IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)
node
and returns the store at the location
of node
. If before
is true, then the store immediately before the Node
node
is returned. Otherwise, the store immediately after node
is returned. If
analysisCaches
is not null, this method uses a cache. analysisCaches
is a map
of a block of node to the cached analysis result. If the cache for transferInput
is not
in analysisCaches
, this method creates new cache and stores it in analysisCaches
. The cache is a map of nodes to the analysis results of the nodes.node
- the node to analyzepreOrPost
- which store to return: the store immediately before node
or the store
after node
blockTransferInput
- the transfer input of the block of this nodenodeValues
- abstract values of nodesanalysisCaches
- caches of analysis resultsnode
(depends on the value of before
) after
running the analysisAnalysisResult<V,S> getResult()
T getTransferFunction()
@Nullable TransferInput<V,S> getInput(Block b)
Block
b.b
- a given BlockV getValue(Node n)
Node
n
, or null
if no information is
available. Note that if the analysis has not finished yet, this value might not represent the
final value for this node.n
- n a noden
, or null
if no information is availableV getValue(Tree t)
Tree
t
, or null
if no information is
available. Note that if the analysis has not finished yet, this value might not represent the
final value for this node.t
- the given treeS getRegularExitStore()
null
, if there is no such store (because the method
cannot exit through the regular exit block).null
, if there is no such store (because the method
cannot exit through the regular exit block)S getExceptionalExitStore()