# HG changeset patch # User Michael Van De Vanter # Date 1433552713 25200 # Node ID 45083be8a812f06dfbb4ca38e6dc2aac5f09da4a # Parent c052d68e7eac71e11b6f65e279784035e0998b4b Truffle: add a version string to the information provided with Language registration diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java --- 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); diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java --- 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); diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java --- 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}. diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java --- 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 diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java --- 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++) { diff -r c052d68e7eac -r 45083be8a812 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLMain.java --- 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 @@ * default printer. * */ -@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> builtins = Collections.emptyList();