comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/PhylumTag.java @ 15605:bb9473723904

Truffle/Instrumentation: - Merge instrumentation support into the general execution context; remove separate Instrumentation interface and implementation - Generalize the ?tagging? mechanism for extensibility: the enum PhylumTag is now an interface, and the standard tags moved to the new enum StandardTag - A new ?trap? mechanism interrupts program execution at any probed node holding a specified PhylumTag; this replaces some other special-purpose code. - Refine several interface by factoring out callback methods and simplifying collaboration among key implementation classes.
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Mon, 12 May 2014 20:17:25 -0700
parents 0c6d8a08e31b
children
comparison
equal deleted inserted replaced
15486:8f09b84f325f 15605:bb9473723904
23 * questions. 23 * questions.
24 */ 24 */
25 package com.oracle.truffle.api.instrument; 25 package com.oracle.truffle.api.instrument;
26 26
27 /** 27 /**
28 * Program element "tags" that define user-visible behavior for debugging and other simple tools. 28 * Program element "tags", presumed to be singletons (best implemented as enums) that define
29 * These categories (<em>phyla</em>) should correspond to program structures that are meaningful to 29 * user-visible behavior for debugging and other simple tools. These categories (<em>phyla</em>)
30 * a guest language programmer. 30 * should correspond to program structures that are meaningful to a guest language programmer.
31 * <p> 31 * <p>
32 * An untagged Truffle node should be understood as an artifact of the guest language implementation 32 * An untagged Truffle node should be understood as an artifact of the guest language implementation
33 * and should not be visible to the user of a guest language programming tool. Nodes may also have 33 * and should not be visible to the user of a guest language programming tool. Nodes may also have
34 * more than one tag, for example a variable assignment that is also a statement. Finally, the 34 * more than one tag, for example a variable assignment that is also a statement. Finally, the
35 * assignment of tags to nodes could depending on the use-case of whatever tool is using them. 35 * assignment of tags to nodes could depending on the use-case of whatever tool is using them.
36 * <p> 36 * <p>
37 * This is a somewhat language-agnostic set of phyla, suitable for conventional imperative
38 * languages, and is being developed incrementally.
39 * <p>
40 * The need for alternative sets of tags is likely to arise, perhaps for other families of languages
41 * (for example for mostly expression-oriented languages) or even for specific languages.
42 * <p>
43 * These are listed alphabetically so that listing from some collection classes will come out in
44 * that order.
45 * <p>
46 * <strong>Disclaimer:</strong> experimental interface under development. 37 * <strong>Disclaimer:</strong> experimental interface under development.
38 *
39 * @see Probe
40 * @see Wrapper
41 * @see StandardTag
47 */ 42 */
48 public enum PhylumTag { 43 public interface PhylumTag {
49 44
50 /** 45 /**
51 * Marker for a variable assignment. 46 * Human-friendly name of guest language program elements belonging to the category, e.g.
47 * "statement".
52 */ 48 */
53 ASSIGNMENT, 49 String name();
54 50
55 /** 51 /**
56 * Marker for a call site. 52 * Criteria and example uses for the tag.
57 */ 53 */
58 CALL, 54 String getDescription();
59
60 /**
61 * Marker for a location where a guest language exception is about to be thrown.
62 */
63 THROW,
64
65 /**
66 * Marker for a location where ordinary "stepping" should halt.
67 */
68 STATEMENT;
69 55
70 } 56 }