changeset 22215:d3bdaa91bc82

Truffle/Instrumentation: method signature on TruffleLanguage for getting each language's "default" ASTProber
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Tue, 15 Sep 2015 11:57:05 -0700
parents 3aad794eec0e
children daaebd13b27a
files truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestingLanguage.java truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/TestingLanguage.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java
diffstat 9 files changed, 135 insertions(+), 83 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestingLanguage.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestingLanguage.java	Tue Sep 15 11:57:05 2015 -0700
@@ -22,6 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
+import java.io.IOException;
+
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.debug.DebugSupportProvider;
@@ -34,10 +36,6 @@
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.source.Source;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
 public final class TestingLanguage extends TruffleLanguage<Object> {
     public static final TestingLanguage INSTANCE = new TestingLanguage();
 
@@ -71,8 +69,8 @@
     }
 
     @Override
-    protected List<ASTProber> getASTProbers() {
-        return Collections.emptyList();
+    protected ASTProber getDefaultASTProber() {
+        return null;
     }
 
     @SuppressWarnings("deprecation")
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Tue Sep 15 11:57:05 2015 -0700
@@ -23,8 +23,6 @@
 package com.oracle.truffle.api.dsl.test.processor;
 
 import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
 
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.TruffleLanguage;
@@ -89,8 +87,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers() {
-            return Collections.emptyList();
+        protected ASTProber getDefaultASTProber() {
+            return null;
         }
 
         @Override
@@ -161,8 +159,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers() {
-            return Collections.emptyList();
+        protected ASTProber getDefaultASTProber() {
+            return null;
         }
 
         @Override
@@ -229,8 +227,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers() {
-            return Collections.emptyList();
+        protected ASTProber getDefaultASTProber() {
+            return null;
         }
 
         @Override
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/TestingLanguage.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/TestingLanguage.java	Tue Sep 15 11:57:05 2015 -0700
@@ -22,6 +22,8 @@
  */
 package com.oracle.truffle.api.test;
 
+import java.io.IOException;
+
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.debug.DebugSupportProvider;
@@ -34,10 +36,6 @@
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.source.Source;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
 public final class TestingLanguage extends TruffleLanguage<Object> {
     public static final TestingLanguage INSTANCE = new TestingLanguage();
 
@@ -70,8 +68,8 @@
     }
 
     @Override
-    protected List<ASTProber> getASTProbers() {
-        return Collections.emptyList();
+    protected ASTProber getDefaultASTProber() {
+        return null;
     }
 
     @SuppressWarnings("deprecation")
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Tue Sep 15 11:57:05 2015 -0700
@@ -28,10 +28,8 @@
 
 import java.io.IOException;
 import java.io.Reader;
-import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.Executors;
@@ -187,8 +185,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers() {
-            return Collections.emptyList();
+        protected ASTProber getDefaultASTProber() {
+            return null;
         }
 
         @Override
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Tue Sep 15 11:57:05 2015 -0700
@@ -28,8 +28,6 @@
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
 
 import org.junit.Test;
 
@@ -256,8 +254,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers() {
-            return Arrays.asList(prober);
+        protected ASTProber getDefaultASTProber() {
+            return prober;
         }
 
         @SuppressWarnings("deprecation")
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Tue Sep 15 11:57:05 2015 -0700
@@ -24,23 +24,51 @@
  */
 package com.oracle.truffle.api.vm;
 
-import com.oracle.truffle.api.*;
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.InterruptedIOException;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
 import com.oracle.truffle.api.TruffleLanguage.Registration;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.impl.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.debug.Debugger;
+import com.oracle.truffle.api.debug.ExecutionEvent;
+import com.oracle.truffle.api.debug.SuspendedEvent;
+import com.oracle.truffle.api.impl.Accessor;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.Instrumenter;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.java.JavaInterop;
-import com.oracle.truffle.api.source.*;
-
-import java.io.*;
-import java.net.*;
-import java.nio.file.*;
-import java.util.*;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.logging.*;
+import com.oracle.truffle.api.source.Source;
 
 /**
  * <em>Virtual machine</em> for Truffle based languages. Term virtual machine is a bit overloaded,
@@ -777,9 +805,8 @@
                 try {
                     impl = LanguageCache.find(n, loader());
                     Instrumenter inst = TruffleVM.this.instrumenter;
-                    for (ASTProber prober : SPI.getASTProbers(TruffleVM.this, impl.getClass())) {
-                        inst.registerASTProber(prober);
-                    }
+                    final ASTProber prober = SPI.getDefaultASTProber(TruffleVM.this, impl.getClass());
+                    inst.registerASTProber(prober);
                     env = SPI.attachEnv(TruffleVM.this, impl, out, err, in);
                 } catch (Exception ex) {
                     throw new IllegalStateException("Cannot initialize " + getShortName() + " language with implementation " + n, ex);
@@ -907,8 +934,8 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers(Object vm, Class<? extends TruffleLanguage> languageClass) {
-            return super.getASTProbers(vm, languageClass);
+        protected ASTProber getDefaultASTProber(Object vm, Class<? extends TruffleLanguage> languageClass) {
+            return super.getDefaultASTProber(vm, languageClass);
         }
 
         @Override
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Tue Sep 15 11:57:05 2015 -0700
@@ -32,7 +32,6 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
 
@@ -209,10 +208,9 @@
     protected abstract void enableASTProbing(ASTProber astProber);
 
     /**
-     * Gets the current specification for AST instrumentation for the language; <em>empty</em> if
-     * none.
+     * Gets the current specification for AST instrumentation for the language.
      */
-    protected abstract List<ASTProber> getASTProbers();
+    protected abstract ASTProber getDefaultASTProber();
 
     /**
      * Runs source code in a halted execution context, or at top level.
@@ -428,9 +426,9 @@
         }
 
         @Override
-        protected List<ASTProber> getASTProbers(Object vm, Class<? extends TruffleLanguage> languageClass) {
+        protected ASTProber getDefaultASTProber(Object vm, Class<? extends TruffleLanguage> languageClass) {
             TruffleLanguage impl = findLanguageImpl(vm, languageClass);
-            return impl.getASTProbers();
+            return impl.getDefaultASTProber();
         }
 
         @SuppressWarnings("deprecation")
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java	Tue Sep 15 11:57:05 2015 -0700
@@ -30,8 +30,6 @@
 import java.io.Writer;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
-import java.util.Collections;
-import java.util.List;
 
 import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CallTarget;
@@ -106,8 +104,8 @@
             }
 
             @Override
-            protected List<ASTProber> getASTProbers() {
-                return Collections.emptyList();
+            protected ASTProber getDefaultASTProber() {
+                return null;
             }
 
             @Override
@@ -212,8 +210,8 @@
         throw new UnsupportedOperationException();
     }
 
-    protected List<ASTProber> getASTProbers(Object vm, Class<? extends TruffleLanguage> languageClass) {
-        return API.getASTProbers(vm, languageClass);
+    protected ASTProber getDefaultASTProber(Object vm, Class<? extends TruffleLanguage> languageClass) {
+        return API.getDefaultASTProber(vm, languageClass);
     }
 
     protected AdvancedInstrumentRootFactory createAdvancedInstrumentRootFactory(Object vm, Class<? extends TruffleLanguage> languageClass, String expr, AdvancedInstrumentResultListener resultListener)
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Mon Sep 14 22:59:51 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Tue Sep 15 11:57:05 2015 -0700
@@ -40,35 +40,76 @@
  */
 package com.oracle.truffle.sl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.vm.*;
-import com.oracle.truffle.api.vm.TruffleVM.Symbol;
-import com.oracle.truffle.sl.builtins.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.call.*;
-import com.oracle.truffle.sl.nodes.controlflow.*;
-import com.oracle.truffle.sl.nodes.expression.*;
-import com.oracle.truffle.sl.nodes.instrument.*;
-import com.oracle.truffle.sl.nodes.local.*;
-import com.oracle.truffle.sl.parser.*;
-import com.oracle.truffle.sl.runtime.*;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.math.BigInteger;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+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.ToolSupportProvider;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.nodes.GraphPrintVisitor;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.vm.TruffleVM;
+import com.oracle.truffle.api.vm.TruffleVM.Symbol;
+import com.oracle.truffle.sl.builtins.SLBuiltinNode;
+import com.oracle.truffle.sl.builtins.SLDefineFunctionBuiltin;
+import com.oracle.truffle.sl.builtins.SLNanoTimeBuiltin;
+import com.oracle.truffle.sl.builtins.SLPrintlnBuiltin;
+import com.oracle.truffle.sl.builtins.SLReadlnBuiltin;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.nodes.SLTypes;
+import com.oracle.truffle.sl.nodes.call.SLDispatchNode;
+import com.oracle.truffle.sl.nodes.call.SLInvokeNode;
+import com.oracle.truffle.sl.nodes.call.SLUndefinedFunctionException;
+import com.oracle.truffle.sl.nodes.controlflow.SLBlockNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLBreakNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLContinueNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLIfNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLReturnNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLWhileNode;
+import com.oracle.truffle.sl.nodes.expression.SLAddNode;
+import com.oracle.truffle.sl.nodes.expression.SLBigIntegerLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLDivNode;
+import com.oracle.truffle.sl.nodes.expression.SLEqualNode;
+import com.oracle.truffle.sl.nodes.expression.SLFunctionLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLLessOrEqualNode;
+import com.oracle.truffle.sl.nodes.expression.SLLessThanNode;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalAndNode;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalOrNode;
+import com.oracle.truffle.sl.nodes.expression.SLMulNode;
+import com.oracle.truffle.sl.nodes.expression.SLStringLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLSubNode;
+import com.oracle.truffle.sl.nodes.instrument.SLDefaultVisualizer;
+import com.oracle.truffle.sl.nodes.instrument.SLStandardASTProber;
+import com.oracle.truffle.sl.nodes.local.SLReadLocalVariableNode;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode;
+import com.oracle.truffle.sl.parser.Parser;
+import com.oracle.truffle.sl.parser.SLNodeFactory;
+import com.oracle.truffle.sl.parser.Scanner;
+import com.oracle.truffle.sl.runtime.SLContext;
+import com.oracle.truffle.sl.runtime.SLFunction;
+import com.oracle.truffle.sl.runtime.SLFunctionRegistry;
+import com.oracle.truffle.sl.runtime.SLNull;
+
 /**
  * SL is a simple language to demonstrate and showcase features of Truffle. The implementation is as
  * simple and clean as possible in order to help understanding the ideas and concepts of Truffle.
@@ -156,11 +197,9 @@
 public final class SLLanguage extends TruffleLanguage<SLContext> {
     private static List<NodeFactory<? extends SLBuiltinNode>> builtins = Collections.emptyList();
     private static Visualizer visualizer = new SLDefaultVisualizer();
-    private List<ASTProber> astProbers;
+    private ASTProber astProber = new SLStandardASTProber();
 
     private SLLanguage() {
-        this.astProbers = new ArrayList<>();
-        astProbers.add(new SLStandardASTProber());
     }
 
     public static final SLLanguage INSTANCE = new SLLanguage();
@@ -444,8 +483,8 @@
     }
 
     @Override
-    protected List<ASTProber> getASTProbers() {
-        return astProbers;
+    protected ASTProber getDefaultASTProber() {
+        return astProber;
     }
 
     @SuppressWarnings("deprecation")