S - The Store used to keep track of intermediate results.public class ConditionalTransferResult<A extends AbstractValue<A>,S extends Store<S>> extends TransferResult<A,S>
TransferResult with two non-exceptional store;
one for the 'then' edge and one for 'else'. The result of
getRegularStore will be the least upper bound of the two underlying
stores.| Modifier and Type | Field and Description |
|---|---|
protected S |
elseStore
The 'else' result store.
|
protected S |
thenStore
The 'then' result store.
|
exceptionalStores, resultValue| Constructor and Description |
|---|
ConditionalTransferResult(A value,
S thenStore,
S elseStore) |
ConditionalTransferResult(A value,
S thenStore,
S elseStore,
boolean storeChanged)
Create a
ConditionalTransferResult with thenStore as the
resulting store if the corresponding Node evaluates to
true and elseStore otherwise. |
ConditionalTransferResult(A value,
S thenStore,
S elseStore,
Map<TypeMirror,S> exceptionalStores) |
ConditionalTransferResult(A value,
S thenStore,
S elseStore,
Map<TypeMirror,S> exceptionalStores,
boolean storeChanged)
Create a
ConditionalTransferResult with thenStore as the
resulting store if the corresponding Node evaluates to
true and elseStore otherwise. |
| Modifier and Type | Method and Description |
|---|---|
boolean |
containsTwoStores() |
S |
getElseStore() |
S |
getRegularStore() |
S |
getThenStore() |
boolean |
storeChanged() |
String |
toString() |
getExceptionalStore, getExceptionalStores, getResultValue, setResultValuepublic ConditionalTransferResult(A value, S thenStore, S elseStore, boolean storeChanged)
ConditionalTransferResult with thenStore as the
resulting store if the corresponding Node evaluates to
true and elseStore otherwise.
For the meaning of storeChanged, see
TransferResult.storeChanged().
Exceptions: If the corresponding Node throws an
exception, then it is assumed that no special handling is necessary and
the store before the corresponding Node will be passed along any
exceptional edge.
Aliasing: thenStore and elseStore are not
allowed to be used anywhere outside of this class (including use through
aliases). Complete control over the objects is transfered to this class.
public ConditionalTransferResult(A value, S thenStore, S elseStore, Map<TypeMirror,S> exceptionalStores, boolean storeChanged)
ConditionalTransferResult with thenStore as the
resulting store if the corresponding Node evaluates to
true and elseStore otherwise.
Exceptions: If the corresponding Node throws an
exception, then the corresponding store in exceptionalStores is
used. If no exception is found in exceptionalStores, then it is
assumed that no special handling is necessary and the store before the
corresponding Node will be passed along any exceptional edge.
Aliasing: thenStore, elseStore, and any store in
exceptionalStores are not allowed to be used anywhere outside of
this class (including use through aliases). Complete control over the
objects is transfered to this class.
public S getRegularStore()
getRegularStore in class TransferResult<A extends AbstractValue<A>,S extends Store<S>>Node corresponding to this transfer function result.public S getThenStore()
getThenStore in class TransferResult<A extends AbstractValue<A>,S extends Store<S>>Node this result belongs
to evaluates to true.public S getElseStore()
getElseStore in class TransferResult<A extends AbstractValue<A>,S extends Store<S>>Node this result belongs
to evaluates to false.public boolean containsTwoStores()
containsTwoStores in class TransferResult<A extends AbstractValue<A>,S extends Store<S>>true if and only if this transfer result contains two
stores that are potentially not equal. Note that the result
true does not imply that getRegularStore cannot
be called (or vice versa for false). Rather, it indicates
that getThenStore or getElseStore can be used to
give more precise results. Otherwise, if the result is
false, then all three methods getRegularStore,
getThenStore, and getElseStore return equivalent
stores.public boolean storeChanged()
storeChanged in class TransferResult<A extends AbstractValue<A>,S extends Store<S>>true if and only if the transfer function returning this
transfer result changed the regularStore, elseStore, or thenStore.TransferResult.storeChanged()