changeset 13562:58ca96949f2e

Truffle: introduce the notion of a node "phylum", a user-oriented categorization of nodes that is independent of implementation, to be used by tools when identifying program parts, such as "statements".
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Tue, 07 Jan 2014 17:52:54 -0800
parents 9cd47b39b0ef
children fb846424299f
files graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/instrument/NodePhylum.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/instrument/PhylumMarked.java
diffstat 2 files changed, 111 insertions(+), 0 deletions(-) [+]
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/nodes/instrument/NodePhylum.java	Tue Jan 07 17:52:54 2014 -0800
@@ -0,0 +1,65 @@
+/*
+ * 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.nodes.instrument;
+
+/**
+ * Categories of {@link InstrumentationProxyNode}s to be used for defining user-visible debugging
+ * and other simple tool behavior. These categories (<em>phyla</em>) should correspond to program
+ * structures that are meaningful to a programmer using the guest language. A Truffle node without a
+ * proxy carrying some phylum should be treated as an artifact of the guest language implementation
+ * and should never to the user of a guest language programming tool.
+ * <p>
+ * Note that phyla are not intended to represent a partition of user-visible node categories, as the
+ * relative categorization of nodes can change with the particular programming tasks at hand.
+ * <p>
+ * This is a somewhat language-agnostic set of phyla, suitable for conventional imperative
+ * languages, and is being developed incrementally.
+ * <p>
+ * The need for alternative sets of phyla is likely to arise, perhaps for other families of
+ * languages (for example for mostly expression-oriented languages) or even for specific languages.
+ * <p>
+ * These are listed alphabetically so that listing from some collection classes will come out in
+ * that order.
+ * <p>
+ * <strong>Disclaimer:</strong> this interface is under development and will change.
+ */
+public enum NodePhylum {
+
+    /**
+     * Marker for a proxy at a variable assignment.
+     */
+    ASSIGNMENT,
+
+    /**
+     * Marker for a proxy at a call site.
+     */
+    CALL,
+
+    /**
+     * Marker for a proxy at which ordinary "stepping" should halt.
+     */
+    STATEMENT;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/instrument/PhylumMarked.java	Tue Jan 07 17:52:54 2014 -0800
@@ -0,0 +1,46 @@
+/*
+ * 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.nodes.instrument;
+
+import java.util.*;
+
+import com.oracle.truffle.api.nodes.*;
+
+/**
+ * A kind of {@link Node} that can be marked as belong to 0 or more {@linkplain NodePhylum phyla}.
+ */
+public interface PhylumMarked {
+
+    /**
+     * Is this proxy tagged as belonging to a particular category of language constructs?
+     */
+    boolean isMarkedAs(NodePhylum phylum);
+
+    /**
+     * In which categories is this node tagged (<em>empty set</em> if none).
+     */
+    Set<NodePhylum> getPhylumMarks();
+
+}