@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 Object evalInContext(Source source, Node node, final MaterializedFrame mFrame) { CallTarget target = API.nodes().getLanguage(node.getRootNode()).parse(source, node, mFrame); try { if (target instanceof RootCallTarget) { RootNode exec = ((RootCallTarget) target).getRootNode(); return exec.execute(mFrame); } else { throw new IllegalStateException("" + target); } } catch (Exception ex) { if (ex instanceof RuntimeException) { throw (RuntimeException) ex; } throw new RuntimeException(ex); } }
static Nodes nodesAccess() { return API.nodes(); }
static Nodes nodesAccess() { return API.nodes(); }
@SuppressWarnings("unchecked") private Env(Object vmObject, LanguageInfo language, OutputStream out, OutputStream err, InputStream in, Map<String, Object> config, OptionValues options, String[] applicationArguments) { this.vmObject = vmObject; this.language = language; this.spi = (TruffleLanguage<Object>) API.nodes().getLanguageSpi(language); this.in = in; this.err = err; this.out = out; this.config = config; this.options = options; this.applicationArguments = applicationArguments == null ? new String[0] : applicationArguments; this.valid = true; }
void initialize(LanguageInfo language, boolean singleton) { this.singletonLanguage = singleton; if (!singleton) { this.languageInfo = language; this.reference = new ContextReference<>(API.nodes().getEngineObject(languageInfo)); } }