diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/AbstractExecutionContext.java @ 15279:0c6d8a08e31b

Truffle: Major cleanup and extension of the Truffle Instrumentation framework in com.oracle.truffle.api
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Sun, 20 Apr 2014 20:37:27 -0700
parents
children be0c151d912b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/AbstractExecutionContext.java	Sun Apr 20 20:37:27 2014 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.api.impl;
+
+import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.impl.*;
+import com.oracle.truffle.api.source.*;
+
+public abstract class AbstractExecutionContext implements ExecutionContext {
+
+    private final SourceManager sourceManager = new SourceManager();
+    private final Instrumentation instrumentation;
+    private Visualizer visualizer = new DefaultVisualizer();
+    protected ASTProber astProber = null;
+
+    protected AbstractExecutionContext() {
+        this.instrumentation = InstrumentationFactory.create(this);
+    }
+
+    public final SourceManager getSourceManager() {
+        return sourceManager;
+    }
+
+    public final Instrumentation instrumentation() {
+        return instrumentation;
+    }
+
+    public Visualizer visualizer() {
+        return visualizer;
+    }
+
+    public void addNodeProber(ASTNodeProber nodeProber) {
+        if (astProber == null) {
+            throw new IllegalStateException("No ASTProber installed in context");
+        }
+        astProber.addNodeProber(nodeProber);
+    }
+
+    /**
+     * Assign guest language-specific visualization support for tools. This must be assigned outside
+     * the implementation context to avoid build circularities.
+     */
+    public void setVisualizer(Visualizer visualizer) {
+        this.visualizer = visualizer;
+    }
+
+    /**
+     * Assigns a guest language-specific manager for using {@link ASTNodeProber}s added by tools to
+     * instrument ASTs with {@link Probe}s at specified nodes. This must be assigned outside the
+     * implementation context to avoid build circularities. It must also be set before any
+     * instrumentation probe implementations are assigned.
+     */
+    public void setASTProber(ASTProber astProber) {
+        this.astProber = astProber;
+    }
+
+    /**
+     * Gets a guest language-specific {@link ASTNodeProber} that will apply all that have been
+     * added; {@code null} if no instrumentation in AST.
+     */
+    public ASTNodeProber getCombinedNodeProber() {
+        return astProber == null ? null : astProber.getCombinedNodeProber();
+    }
+
+    public abstract void setInstrumentEventListener(InstrumentEventListener listener);
+
+    public abstract InstrumentEventListener getInstrumentEventListener();
+}