# HG changeset patch # User Christian Wimmer # Date 1440625751 25200 # Node ID 0aad723479e87cb2abfe711889116aef2574ac38 # Parent c2cb9f1c868804327dc1d71a798a143f302ac9d4# Parent 6203830a4f9abda3d1b798836af7f04724f226d0 Merge diff -r c2cb9f1c8688 -r 0aad723479e8 truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java --- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java Wed Aug 26 15:22:31 2015 +0200 +++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java Wed Aug 26 14:49:11 2015 -0700 @@ -46,8 +46,8 @@ ForeignObjectAccessHeadNode nthParent = (ForeignObjectAccessHeadNode) NodeUtil.getNthParent(this, cacheLength); ObjectAccessNode first = nthParent.getFirst(); if (cacheLength < CACHE_SIZE) { + CachedObjectAccessNode createCachedAccess = createCachedAccess(receiver, nthParent.getAccessTree(), first); cacheLength++; - CachedObjectAccessNode createCachedAccess = createCachedAccess(receiver, nthParent.getAccessTree(), first); return first.replace(createCachedAccess).executeWith(frame, receiver, arguments); } else { return first.replace(createGenericAccess(nthParent.getAccessTree())).executeWith(frame, receiver, arguments); diff -r c2cb9f1c8688 -r 0aad723479e8 truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Wed Aug 26 15:22:31 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Wed Aug 26 14:49: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() { 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(); } diff -r c2cb9f1c8688 -r 0aad723479e8 truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Aug 26 15:22:31 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Aug 26 14:49:11 2015 -0700 @@ -36,13 +36,6 @@ } /** - * Force truffle to run in interpreter mode. - *

- * 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. *

* Can be set with {@code -Dtruffle.TraceRewrites=true}.