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();
         }