changeset 22111:8b72dfac5cc7

Allow selecting the TruffleRuntime using a system property
author Christian Wimmer <christian.wimmer@oracle.com>
date Wed, 26 Aug 2015 14:39:11 -0700
parents 3b2ae36a942f
children 6203830a4f9a
files truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java
diffstat 2 files changed, 13 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Tue Aug 25 09:38:50 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Wed Aug 26 14:39:11 2015 -0700
@@ -44,16 +44,20 @@
     }
 
     private static TruffleRuntime initRuntime() {
-        if (TruffleOptions.ForceInterpreter) {
-            /*
-             * Force Truffle to run in interpreter mode even if we have a specialized implementation
-             * of TruffleRuntime available.
-             */
-            return new DefaultTruffleRuntime();
-        }
-
         return AccessController.doPrivileged(new PrivilegedAction<TruffleRuntime>() {
             public TruffleRuntime run() {
+                String runtimeClassName = System.getProperty("truffle.TruffleRuntime");
+                if (runtimeClassName != null) {
+                    try {
+                        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+                        Class<?> runtimeClass = Class.forName(runtimeClassName, false, cl);
+                        return (TruffleRuntime) runtimeClass.newInstance();
+                    } catch (Throwable e) {
+                        // Fail fast for other errors
+                        throw (InternalError) new InternalError().initCause(e);
+                    }
+                }
+
                 TruffleRuntimeAccess access = null;
                 Class<?> servicesClass = null;
                 try {
@@ -77,6 +81,7 @@
                     }
                 }
                 // TODO: try standard ServiceLoader?
+
                 if (access != null) {
                     return access.getRuntime();
                 }
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Tue Aug 25 09:38:50 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Wed Aug 26 14:39:11 2015 -0700
@@ -36,13 +36,6 @@
     }
 
     /**
-     * Force truffle to run in interpreter mode.
-     * <p>
-     * Can be set with {@code -Dtruffle.ForceInterpreter=true}.
-     */
-    public static final boolean ForceInterpreter = Boolean.getBoolean("truffle.ForceInterpreter");
-
-    /**
      * Enables/disables the rewriting of traces in the Truffle runtime to stdout.
      * <p>
      * Can be set with {@code -Dtruffle.TraceRewrites=true}.