S
- the type of the store returned by copy
and that is used in leastUpperBound
. Usually it is the implementing class itself, e.g. in T extends
Store<T>
.public interface Store<S extends Store<S>>
Modifier and Type | Interface and Description |
---|---|
static class |
Store.FlowRule
A flow rule describes how stores flow along one edge between basic blocks.
|
static class |
Store.Kind |
Modifier and Type | Method and Description |
---|---|
boolean |
canAlias(FlowExpressions.Receiver a,
FlowExpressions.Receiver b)
Can the objects
a and b be aliases? Returns a conservative answer (i.e.,
returns true if not enough information is available to determine aliasing). |
S |
copy() |
S |
leastUpperBound(S other)
Compute the least upper bound of two stores.
|
String |
visualize(CFGVisualizer<?,S,?> viz)
Delegate visualization responsibility to a visualizer.
|
S |
widenedUpperBound(S previous)
Compute an upper bound of two stores that is wider than the least upper bound of the two
stores.
|
S copy()
S leastUpperBound(S other)
Important: This method must fulfill the following contract:
this
.
other
.
this
, even if the signature is
more permissive.
S widenedUpperBound(S previous)
Analysis
. previous
must be the previous store.
A particular analysis might not require widening and should implement this method by calling leastUpperBound.
Important: This method must fulfill the following contract:
this
.
previous
.
this
, even if the signature is
more permissive.
previous
- must be the previous storeboolean canAlias(FlowExpressions.Receiver a, FlowExpressions.Receiver b)
a
and b
be aliases? Returns a conservative answer (i.e.,
returns true
if not enough information is available to determine aliasing).String visualize(CFGVisualizer<?,S,?> viz)
viz
- the visualizer to visualize this store