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();
 }