@SuppressWarnings("rawtypes") @TruffleBoundary <E extends TruffleLanguage> E getLanguage(Class<E> languageClass) { checkDisposed(); if (languageClass != getSpi().getClass()) { throw new IllegalArgumentException("Invalid access to language " + languageClass + "."); } return languageClass.cast(getSpi()); }
void dispose() { Object c = getLanguageContext(); if (c != UNSET_CONTEXT) { getSpi().disposeContext(c); } else { throw new IllegalStateException("Disposing while context has not been set yet."); } }
@Override public void initializeThread(Env env, Thread current) { env.getSpi().initializeThread(env.context, current); }
@Override public void initializeMultiThreading(Env env) { env.getSpi().initializeMultiThreading(env.context); }
@Override public void finalizeContext(Env env) { env.getSpi().finalizeContext(env.context); }
@Override public CallTarget parse(Env env, Source code, Node context, String... argumentNames) { return env.getSpi().parse(code, context, null, argumentNames); }
Iterable<Scope> findLocalScopes(Node node, Frame frame) { assert node != null; return getSpi().findLocalScopes(context, node, frame); }
@Override public CallTarget parse(Env env, Source code, Node context, String... argumentNames) { return env.getSpi().parse(code, context, null, argumentNames); }
@Override public void initializeMultiThreading(Env env) { env.getSpi().initializeMultiThreading(env.context); }
@Override public LanguageInfo getLanguageInfo(Env env) { return env.getSpi().languageInfo; }
@Override public TruffleLanguage<?> getSPI(Env env) { return env.getSpi(); }
@Override public void initializeThread(Env env, Thread current) { env.getSpi().initializeThread(env.context, current); }
@Override public TruffleLanguage<?> getLanguage(Env env) { return env.getSpi(); } }
Object getLanguageGlobal() { Object c = getLanguageContext(); if (c != UNSET_CONTEXT) { return getSpi().getLanguageGlobal(c); } else { return null; } }
Object findExportedSymbol(String globalName, boolean onlyExplicit) { Object c = getLanguageContext(); if (c != UNSET_CONTEXT) { return getSpi().findExportedSymbol(c, globalName, onlyExplicit); } else { return null; } }
@Override public Object createEnvContext(Env env) { Object context = env.getSpi().createContext(env); env.context = context; Assumption contextUnchanged = env.contextUnchangedAssumption; env.contextUnchangedAssumption = Truffle.getRuntime().createAssumption("Language context unchanged"); contextUnchanged.invalidate(); return context; }
@Override public Object createEnvContext(Env env) { Object context = env.getSpi().createContext(env); env.context = context; Assumption contextUnchanged = env.contextUnchangedAssumption; env.contextUnchangedAssumption = Truffle.getRuntime().createAssumption("Language context unchanged"); contextUnchanged.invalidate(); return context; }
SourceSection findSourceLocation(Object obj) { Object c = getLanguageContext(); if (c != UNSET_CONTEXT) { return getSpi().findSourceLocation(c, obj); } else { return null; } }
Object findMetaObjectImpl(Object obj) { Object c = getLanguageContext(); if (c != UNSET_CONTEXT) { return getSpi().findMetaObject(c, obj); } else { return null; } }