diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 22128:f879b1fe3773

Separating the TruffleVM into its own project makes it possible to cleanup various system parts interations
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Thu, 03 Sep 2015 16:38:45 +0200
parents c2cb9f1c8688
children c334865b9d42
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Thu Sep 03 16:29:30 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Thu Sep 03 16:38:45 2015 +0200
@@ -32,8 +32,6 @@
 import com.oracle.truffle.api.instrument.*;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.vm.*;
-import com.oracle.truffle.api.vm.TruffleVM.Language;
 import java.util.Collections;
 import java.util.Map;
 import java.util.WeakHashMap;
@@ -41,14 +39,16 @@
 /**
  * An entry point for everyone who wants to implement a Truffle based language. By providing an
  * implementation of this type and registering it using {@link Registration} annotation, your
- * language becomes accessible to users of the {@link TruffleVM Truffle virtual machine} - all they
- * will need to do is to include your JAR into their application and all the Truffle goodies
- * (multi-language support, multitenant hosting, debugging, etc.) will be made available to them.
+ * language becomes accessible to users of the {@link com.oracle.truffle.api.vm.TruffleVM Truffle
+ * virtual machine} - all they will need to do is to include your JAR into their application and all
+ * the Truffle goodies (multi-language support, multitenant hosting, debugging, etc.) will be made
+ * available to them.
  *
  * @param <C> internal state of the language associated with every thread that is executing program
  *            {@link #parse(com.oracle.truffle.api.source.Source, com.oracle.truffle.api.nodes.Node, java.lang.String...)
  *            parsed} by the language
  */
+@SuppressWarnings("javadoc")
 public abstract class TruffleLanguage<C> {
     /**
      * Constructor to be called by subclasses.
@@ -57,18 +57,19 @@
     }
 
     /**
-     * The annotation to use to register your language to the {@link TruffleVM Truffle} system. By
-     * annotating your implementation of {@link TruffleLanguage} by this annotation you are just a
+     * The annotation to use to register your language to the
+     * {@link com.oracle.truffle.api.vm.TruffleVM Truffle} system. By annotating your implementation
+     * of {@link TruffleLanguage} by this annotation you are just a
      * <em>one JAR drop to the class path</em> away from your users. Once they include your JAR in
-     * their application, your language will be available to the {@link TruffleVM Truffle virtual
-     * machine}.
+     * their application, your language will be available to the
+     * {@link com.oracle.truffle.api.vm.TruffleVM Truffle virtual machine}.
      */
     @Retention(RetentionPolicy.SOURCE)
     @Target(ElementType.TYPE)
     public @interface Registration {
         /**
          * Unique name of your language. This name will be exposed to users via the
-         * {@link Language#getName()} getter.
+         * {@link com.oracle.truffle.api.vm.TruffleVM.Language#getName()} getter.
          *
          * @return identifier of your language
          */
@@ -76,7 +77,7 @@
 
         /**
          * Unique string identifying the language version. This name will be exposed to users via
-         * the {@link Language#getVersion()} getter.
+         * the {@link com.oracle.truffle.api.vm.TruffleVM.Language#getVersion()} getter.
          *
          * @return version of your language
          */
@@ -84,8 +85,9 @@
 
         /**
          * List of MIME types associated with your language. Users will use them (directly or
-         * indirectly) when {@link TruffleVM#eval(com.oracle.truffle.api.source.Source) executing}
-         * their code snippets or their {@link Source files}.
+         * indirectly) when
+         * {@link com.oracle.truffle.api.vm.TruffleVM#eval(com.oracle.truffle.api.source.Source)
+         * executing} their code snippets or their {@link Source files}.
          *
          * @return array of MIME types assigned to your language files
          */
@@ -94,11 +96,12 @@
 
     /**
      * Creates internal representation of the executing context suitable for given environment. Each
-     * time the {@link TruffleLanguage language} is used by a new {@link TruffleVM} or in a new
-     * thread, the system calls this method to let the {@link TruffleLanguage language} prepare for
-     * <em>execution</em>. The returned execution context is completely language specific; it is
-     * however expected it will contain reference to here-in provided <code>env</code> and adjust
-     * itself according to parameters provided by the <code>env</code> object.
+     * time the {@link TruffleLanguage language} is used by a new
+     * {@link com.oracle.truffle.api.vm.TruffleVM} or in a new thread, the system calls this method
+     * to let the {@link TruffleLanguage language} prepare for <em>execution</em>. The returned
+     * execution context is completely language specific; it is however expected it will contain
+     * reference to here-in provided <code>env</code> and adjust itself according to parameters
+     * provided by the <code>env</code> object.
      *
      * @param env the environment the language is supposed to operate in
      * @return internal data of the language in given environment
@@ -122,7 +125,7 @@
      *         just parsed <code>code</code>
      * @throws IOException thrown when I/O or parsing goes wrong. Here-in thrown exception is
      *             propagate to the user who called one of <code>eval</code> methods of
-     *             {@link TruffleVM}
+     *             {@link com.oracle.truffle.api.vm.TruffleVM}
      */
     protected abstract CallTarget parse(Source code, Node context, String... argumentNames) throws IOException;
 
@@ -233,14 +236,14 @@
      * them.
      */
     public static final class Env {
-        private final TruffleVM vm;
+        private final Object vm;
         private final TruffleLanguage<?> lang;
         private final LangCtx<?> langCtx;
         private final Reader in;
         private final Writer err;
         private final Writer out;
 
-        Env(TruffleVM vm, TruffleLanguage<?> lang, Writer out, Writer err, Reader in) {
+        Env(Object vm, TruffleLanguage<?> lang, Writer out, Writer err, Reader in) {
             this.vm = vm;
             this.in = in;
             this.err = err;
@@ -263,7 +266,8 @@
         }
 
         /**
-         * Input associated with this {@link TruffleVM}.
+         * Input associated with {@link com.oracle.truffle.api.vm.TruffleVM} this language is being
+         * executed in.
          *
          * @return reader, never <code>null</code>
          */
@@ -272,7 +276,8 @@
         }
 
         /**
-         * Standard output writer for this {@link TruffleVM}.
+         * Standard output writer for {@link com.oracle.truffle.api.vm.TruffleVM} this language is
+         * being executed in.
          *
          * @return writer, never <code>null</code>
          */
@@ -281,7 +286,8 @@
         }
 
         /**
-         * Standard error writer for this {@link TruffleVM}.
+         * Standard error writer for {@link com.oracle.truffle.api.vm.TruffleVM} this language is
+         * being executed in.
          *
          * @return writer, never <code>null</code>
          */
@@ -295,13 +301,13 @@
     @SuppressWarnings("rawtypes")
     private static final class AccessAPI extends Accessor {
         @Override
-        protected Env attachEnv(TruffleVM vm, TruffleLanguage<?> language, Writer stdOut, Writer stdErr, Reader stdIn) {
+        protected Env attachEnv(Object vm, TruffleLanguage<?> language, Writer stdOut, Writer stdErr, Reader stdIn) {
             Env env = new Env(vm, language, stdOut, stdErr, stdIn);
             return env;
         }
 
         @Override
-        public Object importSymbol(TruffleVM vm, TruffleLanguage<?> queryingLang, String globalName) {
+        protected Object importSymbol(Object vm, TruffleLanguage<?> queryingLang, String globalName) {
             return super.importSymbol(vm, queryingLang, globalName);
         }
 
@@ -330,7 +336,7 @@
         }
 
         @Override
-        protected Env findLanguage(TruffleVM vm, Class<? extends TruffleLanguage> languageClass) {
+        protected Env findLanguage(Object vm, Class<? extends TruffleLanguage> languageClass) {
             return super.findLanguage(vm, languageClass);
         }