diff truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java @ 22219:1c0f490984d5

Merge with f47b601edbc626dcfe8b3636933b4834c89f7779
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Wed, 16 Sep 2015 15:36:22 -0700
parents dc83cc1f94f2 d3bdaa91bc82
children 20380d1d41f2
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Wed Sep 16 12:27:08 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Wed Sep 16 15:36:22 2015 -0700
@@ -22,12 +22,20 @@
  */
 package com.oracle.truffle.api.test.vm;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
 import com.oracle.truffle.api.debug.Breakpoint;
-import com.oracle.truffle.api.debug.DebugSupportException;
 import com.oracle.truffle.api.debug.DebugSupportProvider;
 import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.debug.ExecutionEvent;
@@ -36,23 +44,19 @@
 import com.oracle.truffle.api.instrument.ASTProber;
 import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
 import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Instrumenter;
 import com.oracle.truffle.api.instrument.Probe;
 import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.StandardSyntaxTag;
 import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.instrument.Visualizer;
 import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeVisitor;
 import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.api.vm.EventConsumer;
 import com.oracle.truffle.api.vm.TruffleVM;
-import java.io.IOException;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import org.junit.Test;
 
 /**
  * Bug report validating test.
@@ -102,13 +106,17 @@
             super(AbstractLanguage.class, ss, null);
             node = new ANode(42);
             adoptChildren();
-            node.probe().tagAs(StandardSyntaxTag.STATEMENT, this);
         }
 
         @Override
         public Object execute(VirtualFrame frame) {
             return node.constant();
         }
+
+        @Override
+        public void applyInstrumentation() {
+            super.applyInstrumentation(node);
+        }
     }
 
     private static class ANode extends Node {
@@ -130,34 +138,7 @@
 
         @Override
         public ProbeNode.WrapperNode createWrapperNode() {
-            class WN extends ANode implements ProbeNode.WrapperNode {
-                private ProbeNode probeNode;
-
-                public WN(int constant) {
-                    super(constant);
-                }
-
-                @Override
-                public Node getChild() {
-                    return ANode.this;
-                }
-
-                @Override
-                public Probe getProbe() {
-                    return probeNode.getProbe();
-                }
-
-                @Override
-                public void insertProbe(ProbeNode pn) {
-                    this.probeNode = pn;
-                }
-
-                @Override
-                public String instrumentationInfo() {
-                    throw new UnsupportedOperationException();
-                }
-            }
-            return new WN(constant);
+            return new ANodeWrapper(this);
         }
 
         Object constant() {
@@ -166,6 +147,36 @@
 
     }
 
+    private static class ANodeWrapper extends ANode implements ProbeNode.WrapperNode {
+        @Child ANode child;
+        private ProbeNode probeNode;
+
+        ANodeWrapper(ANode node) {
+            super(1);  // dummy
+            this.child = node;
+        }
+
+        @Override
+        public Node getChild() {
+            return child;
+        }
+
+        @Override
+        public Probe getProbe() {
+            return probeNode.getProbe();
+        }
+
+        @Override
+        public void insertProbe(ProbeNode pn) {
+            this.probeNode = pn;
+        }
+
+        @Override
+        public String instrumentationInfo() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
     private abstract static class AbstractLanguage extends TruffleLanguage<Object> {
     }
 
@@ -173,6 +184,22 @@
     public static final class TestLanguage extends AbstractLanguage implements DebugSupportProvider {
         public static final TestLanguage INSTANCE = new TestLanguage();
 
+        private final ASTProber prober = new ASTProber() {
+
+            public void probeAST(final Instrumenter instrumenter, Node startNode) {
+                startNode.accept(new NodeVisitor() {
+
+                    public boolean visit(Node node) {
+
+                        if (node instanceof ANode) {
+                            instrumenter.probe(node).tagAs(StandardSyntaxTag.STATEMENT, null);
+                        }
+                        return true;
+                    }
+                });
+            }
+        };
+
         @Override
         protected Object createContext(Env env) {
             assertNull("Not defined symbol", env.importSymbol("unknown"));
@@ -199,23 +226,25 @@
             throw new UnsupportedOperationException();
         }
 
+        @SuppressWarnings("deprecation")
         @Override
         protected ToolSupportProvider getToolSupport() {
             throw new UnsupportedOperationException();
         }
 
+        @SuppressWarnings("deprecation")
         @Override
         protected DebugSupportProvider getDebugSupport() {
-            return this;
-        }
-
-        @Override
-        public Object evalInContext(Source source, Node node, MaterializedFrame mFrame) throws DebugSupportException {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public AdvancedInstrumentRootFactory createAdvancedInstrumentRootFactory(String expr, AdvancedInstrumentResultListener resultListener) throws DebugSupportException {
+        public Object evalInContext(Source source, Node node, MaterializedFrame mFrame) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public AdvancedInstrumentRootFactory createAdvancedInstrumentRootFactory(String expr, AdvancedInstrumentResultListener resultListener) {
             throw new InstrumentOKException();
         }
 
@@ -225,6 +254,12 @@
         }
 
         @Override
+        protected ASTProber getDefaultASTProber() {
+            return prober;
+        }
+
+        @SuppressWarnings("deprecation")
+        @Override
         public void enableASTProbing(ASTProber astProber) {
             throw new UnsupportedOperationException();
         }