# HG changeset patch # User Michael Van De Vanter # Date 1442959698 25200 # Node ID cccb1ac700bda91eaaf05bbe243426588f4bffb8 # Parent c4e7737981d3b8163098bebfa0e7a6e20f434737 Team/Instrumentation: the TruflfeVM Debugger is now created eagerly at VM "build" time diff -r c4e7737981d3 -r cccb1ac700bd truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java --- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java Tue Sep 22 10:14:41 2015 -0700 +++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java Tue Sep 22 15:08:18 2015 -0700 @@ -113,7 +113,7 @@ private final EventConsumer[] handlers; private final Map globals; private final Instrumenter instrumenter; - private Debugger debugger; + private final Debugger debugger; /** * Private & temporary only constructor. @@ -128,6 +128,7 @@ this.globals = null; this.executor = null; this.instrumenter = null; + this.debugger = null; } /** @@ -142,6 +143,7 @@ this.initThread = Thread.currentThread(); this.globals = new HashMap<>(globals); this.instrumenter = SPI.createInstrumenter(this); + this.debugger = SPI.createDebugger(this, this.instrumenter); Map map = new HashMap<>(); for (Map.Entry en : LanguageCache.languages().entrySet()) { map.put(en.getKey(), new Language(en.getValue())); @@ -450,14 +452,13 @@ } private Symbol eval(final Language l, final Source s) throws IOException { - final Debugger[] fillIn = {debugger}; final Object[] result = {null, null}; final CountDownLatch ready = new CountDownLatch(1); final TruffleLanguage[] lang = {null}; executor.execute(new Runnable() { @Override public void run() { - evalImpl(fillIn, lang, s, result, l, ready); + evalImpl(lang, s, result, l, ready); } }); exceptionCheck(result); @@ -465,13 +466,10 @@ } @SuppressWarnings("try") - private void evalImpl(Debugger[] fillIn, TruffleLanguage[] fillLang, Source s, Object[] result, Language l, CountDownLatch ready) { - try (Closeable d = SPI.executionStart(this, fillIn, s)) { + private void evalImpl(TruffleLanguage[] fillLang, Source s, Object[] result, Language l, CountDownLatch ready) { + try (Closeable d = SPI.executionStart(this, debugger, s)) { TruffleLanguage langImpl = l.getImpl(true); fillLang[0] = langImpl; - if (debugger == null) { - debugger = fillIn[0]; - } result[0] = SPI.eval(langImpl, s); } catch (IOException ex) { result[1] = ex; @@ -661,13 +659,12 @@ */ public Symbol invoke(final Object thiz, final Object... args) throws IOException { get(); - final Debugger[] fillIn = {debugger}; final CountDownLatch done = new CountDownLatch(1); final Object[] res = {null, null}; executor.execute(new Runnable() { @Override public void run() { - invokeImpl(fillIn, thiz, args, res, done); + invokeImpl(thiz, args, res, done); } }); exceptionCheck(res); @@ -676,16 +673,12 @@ @SuppressWarnings("try") final Symbol invokeProxy(final InvocationHandler chain, final Object wrapper, final Method method, final Object[] args) throws IOException { - final Debugger[] fillIn = {debugger}; final CountDownLatch done = new CountDownLatch(1); final Object[] res = {null, null}; executor.execute(new Runnable() { @Override public void run() { - try (final Closeable c = SPI.executionStart(TruffleVM.this, fillIn, null)) { - if (debugger == null) { - debugger = fillIn[0]; - } + try (final Closeable c = SPI.executionStart(TruffleVM.this, debugger, null)) { res[0] = chain.invoke(wrapper, method, args); } catch (IOException ex) { res[1] = ex; @@ -701,11 +694,8 @@ } @SuppressWarnings("try") - private void invokeImpl(Debugger[] fillIn, Object thiz, Object[] args, Object[] res, CountDownLatch done) { - try (final Closeable c = SPI.executionStart(TruffleVM.this, fillIn, null)) { - if (debugger == null) { - debugger = fillIn[0]; - } + private void invokeImpl(Object thiz, Object[] args, Object[] res, CountDownLatch done) { + try (final Closeable c = SPI.executionStart(TruffleVM.this, debugger, null)) { List arr = new ArrayList<>(); if (thiz == null && language != null) { Object global = SPI.languageGlobal(SPI.findLanguage(TruffleVM.this, language.getClass())); @@ -927,6 +917,11 @@ } @Override + protected Debugger createDebugger(Object vm, Instrumenter instrumenter) { + return super.createDebugger(vm, instrumenter); + } + + @Override protected ASTProber getDefaultASTProber(TruffleLanguage impl) { return super.getDefaultASTProber(impl); } @@ -955,9 +950,9 @@ } @Override - protected Closeable executionStart(Object obj, Debugger[] fillIn, Source s) { + protected Closeable executionStart(Object obj, Debugger debugger, Source s) { TruffleVM vm = (TruffleVM) obj; - return super.executionStart(vm, fillIn, s); + return super.executionStart(vm, debugger, s); } @Override diff -r c4e7737981d3 -r cccb1ac700bd truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java Tue Sep 22 10:14:41 2015 -0700 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java Tue Sep 22 15:08:18 2015 -0700 @@ -808,42 +808,26 @@ @SuppressWarnings("rawtypes") private static final class AccessorDebug extends Accessor { + @Override - protected Closeable executionStart(Object vm, Debugger[] fillIn, Source s) { - final Debugger d; - if (fillIn[0] == null) { - final Instrumenter instrumenter = ACCESSOR.getInstrumenter(vm); - d = fillIn[0] = new Debugger(vm, instrumenter); - } else { - d = fillIn[0]; - } - d.executionStarted(s); + protected Closeable executionStart(Object vm, final Debugger debugger, Source s) { + debugger.executionStarted(s); return new Closeable() { @Override public void close() throws IOException { - d.executionEnded(); + debugger.executionEnded(); } }; } @Override - protected Class findLanguage(Probe probe) { - return super.findLanguage(probe); + protected Debugger createDebugger(Object vm, Instrumenter instrumenter) { + return new Debugger(vm, instrumenter); } @Override - protected TruffleLanguage.Env findLanguage(Object vm, Class languageClass) { - return super.findLanguage(vm, languageClass); - } - - @Override - protected TruffleLanguage findLanguage(TruffleLanguage.Env env) { - return super.findLanguage(env); - } - - @Override - protected Instrumenter getInstrumenter(Object vm) { - return super.getInstrumenter(vm); + protected Class findLanguage(Probe probe) { + return super.findLanguage(probe); } @Override diff -r c4e7737981d3 -r cccb1ac700bd truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Tue Sep 22 10:14:41 2015 -0700 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Tue Sep 22 15:08:18 2015 -0700 @@ -309,11 +309,15 @@ return INSTRUMENT.createInstrumenter(vm); } + protected Debugger createDebugger(Object vm, Instrumenter instrumenter) { + return DEBUG.createDebugger(vm, instrumenter); + } + private static Reference previousVM = new WeakReference<>(null); private static Assumption oneVM = Truffle.getRuntime().createAssumption(); - protected Closeable executionStart(Object vm, Debugger[] fillIn, Source s) { - final Closeable debugClose = DEBUG.executionStart(vm, fillIn, s); + protected Closeable executionStart(Object vm, Debugger debugger, Source s) { + final Closeable debugClose = DEBUG.executionStart(vm, debugger, s); final Object prev = CURRENT_VM.get(); if (!(vm == previousVM.get())) { previousVM = new WeakReference<>(vm);