Mercurial > hg > truffle
diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 22380:b4e89154a774
Supporting efficient cross-language eval
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Wed, 18 Nov 2015 12:33:52 +0100 |
parents | 299c279c87b3 06bdf4a43126 |
children | fb607f23d1eb |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Wed Nov 18 09:02:41 2015 +0100 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Wed Nov 18 12:33:52 2015 +0100 @@ -385,6 +385,25 @@ } /** + * Evaluates source of (potentially different) language. The {@link Source#getMimeType() + * MIME type) is used to identify the {@link TruffleLanguage} to use to perform the + * {@link #parse(com.oracle.truffle.api.source.Source, com.oracle.truffle.api.nodes.Node, java.lang.String...)}. + * The names of arguments are parameters for the resulting + * {#link CallTarget} that allow the <code>source</code> to reference + * the actual parameters passed to {@link CallTarget#call(java.lang.Object...)}. + * + * @param source the source to evaluate + * @param argumentNames the names of {@link CallTarget#call(java.lang.Object...)} + * arguments that can be referenced from the source + * @return the call target representing the parsed result + * @throws IOException if the parsing or evaluation fails for some reason + */ + public CallTarget parse(Source source, String... argumentNames) throws IOException { + TruffleLanguage<?> language = API.findLanguageImpl(vm, null, source.getMimeType()); + return language.parse(source, null, argumentNames); + } + + /** * Input associated with {@link com.oracle.truffle.api.vm.PolyglotEngine} this language is * being executed in. * @@ -484,6 +503,11 @@ } @Override + protected TruffleLanguage<?> findLanguageImpl(Object known, Class<? extends TruffleLanguage> languageClass, String mimeType) { + return super.findLanguageImpl(known, languageClass, mimeType); + } + + @Override protected Object languageGlobal(TruffleLanguage.Env env) { return env.langCtx.getLanguageGlobal(); }