changeset 21889:45083be8a812

Truffle: add a version string to the information provided with Language registration
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Fri, 05 Jun 2015 18:05:13 -0700
parents c052d68e7eac
children 894f82515e38
files graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLMain.java
diffstat 6 files changed, 39 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Fri Jun 05 18:05:13 2015 -0700
@@ -31,22 +31,22 @@
 public class LanguageRegistrationTest {
 
     @ExpectError("Registered language class must be public")
-    @TruffleLanguage.Registration(name = "myLang", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLang", version = "0", mimeType = "text/x-my")
     private static final class MyLang {
     }
 
     @ExpectError("Registered language inner-class must be static")
-    @TruffleLanguage.Registration(name = "myLangNonStatic", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLangNonStatic", version = "0", mimeType = "text/x-my")
     public final class MyLangNonStatic {
     }
 
     @ExpectError("Registered language class must subclass TruffleLanguage")
-    @TruffleLanguage.Registration(name = "myLang", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLang", version = "0", mimeType = "text/x-my")
     public static final class MyLangNoSubclass {
     }
 
     @ExpectError("Language must have a public constructor accepting TruffleLanguage.Env as parameter")
-    @TruffleLanguage.Registration(name = "myLangNoCnstr", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLangNoCnstr", version = "0", mimeType = "text/x-my")
     public static final class MyLangWrongConstr extends TruffleLanguage {
         private MyLangWrongConstr() {
             super(null);
@@ -74,7 +74,7 @@
     }
 
     @ExpectError("Language must have a public constructor accepting TruffleLanguage.Env as parameter")
-    @TruffleLanguage.Registration(name = "myLangNoCnstr", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLangNoCnstr", version = "0", mimeType = "text/x-my")
     public static final class MyLangNoConstr extends TruffleLanguage {
         public MyLangNoConstr() {
             super(null);
@@ -101,7 +101,7 @@
         }
     }
 
-    @TruffleLanguage.Registration(name = "myLangGood", mimeType = "text/x-my")
+    @TruffleLanguage.Registration(name = "myLangGood", version = "0", mimeType = "text/x-my")
     public static final class MyLangGood extends TruffleLanguage {
         public MyLangGood(TruffleLanguage.Env env) {
             super(env);
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Fri Jun 05 18:05:13 2015 -0700
@@ -165,21 +165,21 @@
     private static final String L2 = "application/x-test-import-export-2";
     private static final String L3 = "application/x-test-import-export-3";
 
-    @TruffleLanguage.Registration(mimeType = L1, name = "ImportExport1")
+    @TruffleLanguage.Registration(mimeType = L1, name = "ImportExport1", version = "0")
     public static final class ExportImportLanguage1 extends AbstractExportImportLanguage {
         public ExportImportLanguage1(Env env) {
             super(env);
         }
     }
 
-    @TruffleLanguage.Registration(mimeType = L2, name = "ImportExport2")
+    @TruffleLanguage.Registration(mimeType = L2, name = "ImportExport2", version = "0")
     public static final class ExportImportLanguage2 extends AbstractExportImportLanguage {
         public ExportImportLanguage2(Env env) {
             super(env);
         }
     }
 
-    @TruffleLanguage.Registration(mimeType = L3, name = "ImportExport3")
+    @TruffleLanguage.Registration(mimeType = L3, name = "ImportExport3", version = "0")
     public static final class ExportImportLanguage3 extends AbstractExportImportLanguage {
         public ExportImportLanguage3(Env env) {
             super(env);
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Fri Jun 05 18:05:13 2015 -0700
@@ -72,6 +72,14 @@
         String name();
 
         /**
+         * Unique string identifying the language version. This name will be exposed to users via
+         * the {@link Language#getVersion()} getter.
+         *
+         * @return version of your language
+         */
+        String version();
+
+        /**
          * List of MIME types associated with your language. Users will use them (directly or
          * indirectly) when {@link TruffleVM#eval(java.lang.String, java.lang.String) executing}
          * their code snippets or their {@link TruffleVM#eval(java.net.URI) files}.
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java	Fri Jun 05 18:05:13 2015 -0700
@@ -448,6 +448,24 @@
             return props.getProperty(prefix + "name");
         }
 
+        /**
+         * Name of the language version.
+         *
+         * @return string specifying the language version
+         */
+        public String getVersion() {
+            return props.getProperty(prefix + "version");
+        }
+
+        /**
+         * Human readable string that identifies the language and version.
+         *
+         * @return string describing the specific language version
+         */
+        public String getShortName() {
+            return getName() + getVersion();
+        }
+
         TruffleLanguage getImpl() {
             if (impl == null) {
                 String n = props.getProperty(prefix + "className");
@@ -456,7 +474,7 @@
                     Constructor<?> constructor = langClazz.getConstructor(Env.class);
                     impl = SPI.attachEnv(TruffleVM.this, constructor, out, err, in);
                 } catch (Exception ex) {
-                    throw new IllegalStateException("Cannot initialize " + getName() + " language with implementation " + n, ex);
+                    throw new IllegalStateException("Cannot initialize " + getShortName() + " language with implementation " + n, ex);
                 }
             }
             return impl;
@@ -464,7 +482,7 @@
 
         @Override
         public String toString() {
-            return "[" + getName() + " for " + getMimeTypes() + "]";
+            return "[" + getShortName() + " for " + getMimeTypes() + "]";
         }
     } // end of Language
 
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java	Fri Jun 05 18:05:13 2015 -0700
@@ -56,6 +56,7 @@
             String prefix = "language" + ++cnt + ".";
             String className = processingEnv.getElementUtils().getBinaryName(l).toString();
             p.setProperty(prefix + "name", annotation.name());
+            p.setProperty(prefix + "version", annotation.version());
             p.setProperty(prefix + "className", className);
             String[] mimes = annotation.mimeType();
             for (int i = 0; i < mimes.length; i++) {
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLMain.java	Fri Jun 05 23:05:16 2015 +0200
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLMain.java	Fri Jun 05 18:05:13 2015 -0700
@@ -133,7 +133,7 @@
  * <em>default printer</em>.
  *
  */
-@TruffleLanguage.Registration(name = "sl", mimeType = "application/x-sl")
+@TruffleLanguage.Registration(name = "sl", version = "0.5", mimeType = "application/x-sl")
 public class SLMain extends TruffleLanguage {
     private static SLMain LAST;
     private static List<NodeFactory<? extends SLBuiltinNode>> builtins = Collections.emptyList();