Package com.oracle.truffle.api.dsl
Annotation Type TypeCheck
-
@Retention(CLASS) @Target(METHOD) public @interface 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 typeObject
or a more specific one from theTypeSystem
. You can define multiple overloadedTypeCheck
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; } }