Package com.oracle.truffle.api.dsl
Annotation Type TypeCheck
Provides a way to define a custom type check for a defined type. The name of the annotated method
must fit to the pattern is${typeName} (eg. isInteger), where ${typeName} must be a valid type
defined in the parent TypeSystem
. The annotated method must have exactly one argument
where the type of the argument is the generic type Object
or a more specific one from the
TypeSystem
. You can define multiple overloaded TypeCheck
methods for the same
type. This can be used to reduce the boxing overhead in type conversions.
By default the system generates type checks for all types in the parent TypeSystem
which
look like the follows:
@TypeCheck boolean is${typeName}(Object value) { return value instanceof ${typeName}; }Example:
A type check for BigInteger with one overloaded optimized variant to reduce boxing.
@TypeSystem(types = {int.class, BigInteger.class, String.class}, nodeBaseClass = TypedNode.class) public abstract class Types { @TypeCheck public boolean isBigInteger(Object value) { return value instanceof Integer || value instanceof BigInteger; } @TypeCheck public boolean isBigInteger(int value) { return true; } }