@Override public Env createEnv(Object vmObject, LanguageInfo language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn, Map<String, Object> config, OptionValues options, String[] applicationArguments) { Env env = new Env(vmObject, language, stdOut, stdErr, stdIn, config, options, applicationArguments); LinkedHashSet<Object> collectedServices = new LinkedHashSet<>(); AccessAPI.instrumentAccess().collectEnvServices(collectedServices, API.nodes().getEngineObject(language), language); env.services = new ArrayList<>(collectedServices); return env; }
@Override public Env createEnv(Object vmObject, TruffleLanguage<?> language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn, Map<String, Object> config, OptionValues options, String[] applicationArguments, FileSystem fileSystem) { Env env = new Env(vmObject, language, stdOut, stdErr, stdIn, config, options, applicationArguments, fileSystem); LinkedHashSet<Object> collectedServices = new LinkedHashSet<>(); LanguageInfo info = language.languageInfo; AccessAPI.instrumentAccess().collectEnvServices(collectedServices, API.nodes().getEngineObject(info), language); env.services = new ArrayList<>(collectedServices); return env; }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((PolyglotLanguage) NODES.getEngineObject(language)).cache.getLanguageClass(); }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).cache.getLanguageClass(); }
@Override public Env getEnvForInstrument(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).currentLanguage().getEnv(true); }
@Override public Env getExistingEnvForInstrument(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).currentLanguage().getEnv(false); }
FindContextNodeImpl(Env env) { this.env = env; this.languageShared = (LanguageShared) NODES.getEngineObject(LANGUAGE.getLanguageInfo(env)); }
/** * Returns the home location for this language. This corresponds to the directory in which the * Jar file is located, if run from a Jar file. For an AOT compiled binary, this corresponds to * the location of the language files in the default GraalVM distribution layout. executable or * shared library. * * @since 1.0 */ protected final String getLanguageHome() { return AccessAPI.engineAccess().getLanguageHome(AccessAPI.nodesAccess().getEngineObject(languageInfo)); }
@Override public <S> S lookup(LanguageInfo info, Class<S> serviceClass) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); return language.lookup(serviceClass); }
void initialize(LanguageInfo language, boolean singleton) { this.singletonLanguage = singleton; if (!singleton) { this.languageInfo = language; this.reference = new ContextReference<>(API.nodes().getEngineObject(languageInfo)); } }
private static InstrumentationHandler getHandler(RootNode rootNode) { LanguageInfo info = rootNode.getLanguageInfo(); if (info == null) { return null; } Object languageShared = nodesAccess().getEngineObject(info); if (languageShared == null) { return null; } return (InstrumentationHandler) engineAccess().getInstrumentationHandler(languageShared); }
@Override public <S> S lookup(LanguageInfo language, Class<S> type) { LanguageShared cache = (LanguageShared) NODES.getEngineObject(language); return LANGUAGE.lookup(cache.getLanguageEnsureInitialized(), type); }
@Override public Env getEnvForInstrument(LanguageInfo info) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); return PolyglotContextImpl.requireContext().getContextInitialized(language, null).env; }
private static InstrumentationHandler getHandler(RootNode rootNode) { LanguageInfo info = rootNode.getLanguageInfo(); if (info == null) { return null; } Object languageShared = nodesAccess().getEngineObject(info); if (languageShared == null) { return null; } return (InstrumentationHandler) engineAccess().getInstrumentationHandler(languageShared); }
@Override public Env getEnvForInstrument(LanguageInfo info) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); PolyglotLanguageContext languageContext = PolyglotContextImpl.requireContext().contexts[language.index]; languageContext.ensureCreated(null); return languageContext.env; }
@Override public TruffleLanguage.Env getLanguageEnv(Object languageVMObject, LanguageInfo language) { PolyglotLanguage lang = (PolyglotLanguage) NODES.getEngineObject(language); PolyglotLanguageContext context = ((PolyglotLanguageContext) languageVMObject); return context.context.getContext(lang).env; }
@Override public <S> S lookup(LanguageInfo info, Class<S> serviceClass) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); PolyglotLanguageContext languageContext = PolyglotContextImpl.requireContext().getContextInitialized(language, language); return LANGUAGE.lookup(LANGUAGE.getLanguage(languageContext.env), serviceClass); }
@Override public Env getExistingEnvForInstrument(LanguageInfo info) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); PolyglotLanguageContext languageContext = PolyglotContextImpl.requireContext().contexts[language.index]; return languageContext.env; }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((PolyglotLanguage) NODES.getEngineObject(language)).cache.getLanguageClass(); }
@Override public Env getExistingEnvForInstrument(LanguageInfo info) { PolyglotLanguage language = (PolyglotLanguage) NODES.getEngineObject(info); PolyglotLanguageContext languageContext = PolyglotContextImpl.requireContext().contexts[language.index]; return languageContext.isInitialized() ? languageContext.env : null; }