Mercurial > hg > truffle
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); }