S - the Store used to keep track of intermediate resultspublic 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)
|
ConditionalTransferResult(A value,
S thenStore,
S elseStore,
Map<TypeMirror,S> exceptionalStores) |
ConditionalTransferResult(A value,
S thenStore,
S elseStore,
@Nullable 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()
The regular result store.
|
S |
getThenStore() |
boolean |
storeChanged() |
String |
toString() |
getExceptionalStore, getExceptionalStores, getResultValue, setResultValuepublic ConditionalTransferResult(A value, S thenStore, S elseStore, boolean storeChanged)
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)
public ConditionalTransferResult(A value, S thenStore, S elseStore, @Nullable Map<TypeMirror,S> exceptionalStores, 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 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()