public interface Assumption
Assumption.invalidate()
). Once
invalidated, an assumption can never get valid again. Assumptions can be created using the
TruffleRuntime.createAssumption()
or the TruffleRuntime.createAssumption(String)
method. The Truffle compiler has special knowledge of this class in order to produce efficient
machine code for checking an assumption in case the assumption object is a compile time constant.
Therefore, assumptions should be stored in final fields in Truffle nodes.
All instances of classes implementing Assumption
must be held in final
fields for
compiler optimizations to take effect.
Do not manually subclass the Assumption
interface. This class is only intended to be
subclassed by Truffle runtime implementations to avoid polymorphism in performance sensitive
methods.
Modifier and Type | Field and Description |
---|---|
static Assumption |
ALWAYS_VALID
An assumption that is always valid and fails with an
UnsupportedOperationException if
invalidated. |
static Assumption |
NEVER_VALID
An assumption that is never valid.
|
Modifier and Type | Method and Description |
---|---|
void |
check()
Checks that this assumption is still valid.
|
static Assumption |
create()
Creates a new assumption with a name.
|
static Assumption |
create(String name)
Creates a new assumption with a name.
|
String |
getName()
A name for the assumption that is used for debug output.
|
void |
invalidate()
Invalidates this assumption.
|
default void |
invalidate(String message)
Invalidates this assumption.
|
boolean |
isValid()
Checks whether the assumption is still valid.
|
static boolean |
isValidAssumption(Assumption assumption)
Checks whether an assumption is not
null and valid. |
static boolean |
isValidAssumption(Assumption[] assumptions)
Checks whether all assumptions in an array are not
null and valid. |
static final Assumption ALWAYS_VALID
UnsupportedOperationException
if
invalidated.static final Assumption NEVER_VALID
void check() throws InvalidAssumptionException
Assumption.isValid()
method when writing
guest language interpreter code. The catch block should perform a node rewrite (see
Node.replace(Node)
) with a node that no longer relies on the assumption.InvalidAssumptionException
- If the assumption is no longer valid.boolean isValid()
void invalidate()
default void invalidate(String message)
message
- a message stating the reason of the invalidationString getName()
static boolean isValidAssumption(Assumption assumption)
null
and valid.static boolean isValidAssumption(Assumption[] assumptions)
null
and valid. Returns
false
if the assumptions array itself is null
. This method is
designed for compilation. Note that the provided assumptions array must be a compilation
final array with dimensions
set to one.static Assumption create()
TruffleRuntime.createAssumption()
.static Assumption create(String name)
TruffleRuntime.createAssumption(String)
.