@Retention(value=CLASS) @Target(value=PARAMETER) public @interface CachedLanguage
TruffleLanguage.LanguageReference that
provides it. The latter parameter allows to lookup the language lazily, e.g. in a conditional
branch. Using this annotation always allows to generate uncached
versions of the node.
This annotation can be used in two different ways:
@GenerateUncached
abstract static class ExampleNode extends Node {
abstract Object execute(Object argument);
@Specialization
static int doInt(int value,
@CachedLanguage MyLanguage language) {
// use context
return value;
}
}
@GenerateUncached
abstract class ExampleNode extends Node {
abstract Object execute(Object argument);
@Specialization
static int doInt(int value,
@CachedLanguage LanguageReference ref) {
if (value == 42) {
// use context conditionally
MyLanguage language = ref.get();
}
return value;
}
}
The generated code uses the Node.lookupLanguageReference(Class) method to implement this
feature. This method may also be used manually.