diff truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java @ 22066:78c3d3d8d86e

Clearly separating the TruffleLanguage definition from context used during its execution. TruffleLanguage now has to have public static field INSTANCE and override createContext method.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Thu, 06 Aug 2015 08:31:49 +0200
parents e7c2d36daf72
children dc83cc1f94f2 3aad794eec0e
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Wed Aug 05 10:19:41 2015 -0700
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Thu Aug 06 08:31:49 2015 +0200
@@ -48,11 +48,11 @@
     public static final class MyLangNoSubclass {
     }
 
-    @ExpectError("Language must have a public constructor accepting TruffleLanguage.Env as parameter")
+    @ExpectError("Language class must have public static final singleton field called INSTANCE")
     @TruffleLanguage.Registration(name = "myLangNoCnstr", version = "0", mimeType = "text/x-my")
-    public static final class MyLangWrongConstr extends TruffleLanguage {
+    public static final class MyLangWrongConstr extends TruffleLanguage<Object> {
         private MyLangWrongConstr() {
-            super(null);
+            super();
         }
 
         @Override
@@ -61,12 +61,12 @@
         }
 
         @Override
-        protected Object findExportedSymbol(String globalName, boolean onlyExplicit) {
+        protected Object findExportedSymbol(Object context, String globalName, boolean onlyExplicit) {
             return null;
         }
 
         @Override
-        protected Object getLanguageGlobal() {
+        protected Object getLanguageGlobal(Object context) {
             return null;
         }
 
@@ -85,13 +85,18 @@
             return null;
         }
 
+        @Override
+        protected Object createContext(Env env) {
+            throw new UnsupportedOperationException();
+        }
+
     }
 
-    @ExpectError("Language must have a public constructor accepting TruffleLanguage.Env as parameter")
-    @TruffleLanguage.Registration(name = "myLangNoCnstr", version = "0", mimeType = "text/x-my")
-    public static final class MyLangNoConstr extends TruffleLanguage {
-        public MyLangNoConstr() {
-            super(null);
+    @ExpectError("Language class must have public static final singleton field called INSTANCE")
+    @TruffleLanguage.Registration(name = "myLangNoField", version = "0", mimeType = "text/x-my")
+    public static final class MyLangNoField extends TruffleLanguage<Object> {
+        public MyLangNoField() {
+            super();
         }
 
         @Override
@@ -100,12 +105,12 @@
         }
 
         @Override
-        protected Object findExportedSymbol(String globalName, boolean onlyExplicit) {
+        protected Object findExportedSymbol(Object context, String globalName, boolean onlyExplicit) {
             return null;
         }
 
         @Override
-        protected Object getLanguageGlobal() {
+        protected Object getLanguageGlobal(Object context) {
             return null;
         }
 
@@ -124,21 +129,28 @@
             return null;
         }
 
+        @Override
+        protected Object createContext(Env env) {
+            throw new UnsupportedOperationException();
+        }
+
     }
 
     @TruffleLanguage.Registration(name = "myLangGood", version = "0", mimeType = "text/x-my")
-    public static final class MyLangGood extends TruffleLanguage {
-        public MyLangGood(TruffleLanguage.Env env) {
-            super(env);
+    public static final class MyLangGood extends TruffleLanguage<Object> {
+        private MyLangGood() {
+            super();
         }
 
+        public static final MyLangGood INSTANCE = new MyLangGood();
+
         @Override
-        protected Object findExportedSymbol(String globalName, boolean onlyExplicit) {
+        protected Object findExportedSymbol(Object context, String globalName, boolean onlyExplicit) {
             return null;
         }
 
         @Override
-        protected Object getLanguageGlobal() {
+        protected Object getLanguageGlobal(Object context) {
             return null;
         }
 
@@ -162,5 +174,10 @@
             throw new IOException();
         }
 
+        @Override
+        protected Object createContext(Env env) {
+            return env;
+        }
+
     }
 }