Mercurial > hg > truffle
diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Probe.java @ 22003:5bc7f7b867ab
Making debugger always on for each TruffleVM execution. Introducing EventConsumer to process such debugger events. Requesting each RootNode to be associated with a TruffleLanguage, so debugger can find out proper context for each Node where executions gets suspended.
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Sat, 18 Jul 2015 18:03:36 +0200 |
parents | 9c8c0937da41 |
children | 78c3d3d8d86e |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Probe.java Thu Jul 16 19:11:31 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Probe.java Sat Jul 18 18:03:36 2015 +0200 @@ -30,6 +30,7 @@ import com.oracle.truffle.api.*; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; +import com.oracle.truffle.api.impl.Accessor; import com.oracle.truffle.api.instrument.InstrumentationNode.TruffleEvents; import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.source.*; @@ -47,8 +48,8 @@ * </ol> * <p> * Client-oriented documentation for the use of Probes is available online at <a - * HREF="https://wiki.openjdk.java.net/display/Graal/Finding+Probes" - * >https://wiki.openjdk.java.net/display/Graal/Finding+Probes</a> + * HREF="https://wiki.openjdk.java.net/display/Graal/Finding+Probes" >https://wiki.openjdk.java. + * net/display/Graal/Finding+Probes</a> * <p> * <h4>Implementation notes:</h4> * <p> @@ -100,6 +101,7 @@ * @see SyntaxTag */ public final class Probe { + private final Class<? extends TruffleLanguage> language; private static final boolean TRACE = false; private static final String TRACE_PREFIX = "PROBE: "; @@ -303,7 +305,7 @@ /** * Intended for use only by {@link ProbeNode}. */ - Probe(ProbeNode probeNode, SourceSection sourceSection) { + Probe(Class<? extends TruffleLanguage> l, ProbeNode probeNode, SourceSection sourceSection) { this.sourceSection = sourceSection; probes.add(new WeakReference<>(this)); registerProbeNodeClone(probeNode); @@ -314,6 +316,7 @@ for (ProbeListener listener : probeListeners) { listener.newProbeInserted(this); } + this.language = l; } /** @@ -483,4 +486,18 @@ sb.append("]"); return sb.toString(); } + + static final class AccessorInstrument extends Accessor { + @Override + protected Class<? extends TruffleLanguage> findLanguage(RootNode n) { + return super.findLanguage(n); + } + + @Override + protected Class<? extends TruffleLanguage> findLanguage(Probe probe) { + return probe.language; + } + } + + static final AccessorInstrument ACCESSOR = new AccessorInstrument(); }