Mercurial > hg > truffle
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java @ 21887:543f150e7fa0
com.oracle.jvmci.service.Service is now a marker for service implementations available via JVMCI; removed Truffle -> JVMCI dependency
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 09 Jun 2015 22:44:34 +0200 |
parents | ffe693cc427f |
children | 0a6e10379b9b |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Tue Jun 09 22:31:05 2015 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Tue Jun 09 22:44:34 2015 +0200 @@ -24,9 +24,9 @@ */ package com.oracle.truffle.api; +import java.lang.reflect.*; import java.security.*; -import com.oracle.jvmci.service.*; import com.oracle.truffle.api.impl.*; /** @@ -55,11 +55,22 @@ return AccessController.doPrivileged(new PrivilegedAction<TruffleRuntime>() { public TruffleRuntime run() { TruffleRuntimeAccess access = null; + Class<?> servicesClass = null; try { - access = Services.loadSingle(TruffleRuntimeAccess.class, false); - } catch (NoClassDefFoundError e) { + servicesClass = Class.forName("com.oracle.jvmci.service.Services"); + } catch (ClassNotFoundException e) { // JVMCI is unavailable } + if (servicesClass != null) { + try { + Method m = servicesClass.getDeclaredMethod("loadSingle", Class.class, boolean.class); + access = (TruffleRuntimeAccess) m.invoke(null, TruffleRuntimeAccess.class, false); + } catch (Throwable e) { + // Fail fast for other errors + throw (InternalError) new InternalError().initCause(e); + } + } + // TODO: try standard ServiceLoader? if (access != null) { return access.getRuntime(); }