Mercurial > hg > graal-compiler
annotate graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/tools/TestNodes.java @ 19072:deb2467530e4
Reassociate invariants near end of MidTier
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 02 Feb 2015 14:29:29 -0800 |
parents | cca166aa28c0 |
children | 1d6a7ea5de59 |
rev | line source |
---|---|
18988
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
1 /* |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
4 * |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
8 * |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
14 * |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
18 * |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
21 * questions. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
22 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.truffle.api.test.tools; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
24 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
25 import com.oracle.truffle.api.*; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
26 import com.oracle.truffle.api.frame.*; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
27 import com.oracle.truffle.api.instrument.*; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
28 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.truffle.api.nodes.*; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.truffle.api.source.*; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
31 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
32 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
33 * Nodes and an {@linkplain CallTarget executable ASTs} for testing. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
34 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
35 public class TestNodes { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
36 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
37 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
38 * A fake source used for testing: empty line 1, expression on line 2. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
39 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
40 public static final Source expr13Source = Source.fromText("\n6+7\n", "Test Source: expression on line 2 that evaluates to 13"); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
41 public static final LineLocation expr13Line1 = expr13Source.createLineLocation(1); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
42 public static final LineLocation expr13Line2 = expr13Source.createLineLocation(2); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
43 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
44 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
45 * An executable addition expression that evaluates to 13. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
46 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
47 public static CallTarget createExpr13TestCallTarget() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
48 final RootNode rootNode = createExpr13TestRootNode(); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
49 return Truffle.getRuntime().createCallTarget(rootNode); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
50 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
51 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
52 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
53 * Root holding an addition expression that evaluates to 13. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
54 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
55 public static RootNode createExpr13TestRootNode() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
56 final TestLanguageNode ast = createExpr13AST(); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
57 final TestRootNode rootNode = new TestRootNode(ast); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
58 rootNode.adoptChildren(); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
59 return rootNode; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
60 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
61 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
62 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
63 * Addition expression that evaluates to 13, with faked source attribution. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
64 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
65 public static TestLanguageNode createExpr13AST() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
66 final SourceSection leftSourceSection = expr13Source.createSection("left", 1, 1); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
67 final TestValueNode leftValueNode = new TestValueNode(6, leftSourceSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
68 final SourceSection rightSourceSection = expr13Source.createSection("right", 3, 1); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
69 final TestValueNode rightValueNode = new TestValueNode(7, rightSourceSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
70 final SourceSection exprSourceSection = expr13Source.createSection("expr", 1, 3); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
71 return new TestAddNode(leftValueNode, rightValueNode, exprSourceSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
72 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
73 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
74 public abstract static class TestLanguageNode extends Node { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
75 public abstract Object execute(VirtualFrame frame); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
76 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
77 public TestLanguageNode() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
78 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
79 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
80 public TestLanguageNode(SourceSection srcSection) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
81 super(srcSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
82 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
83 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
84 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
85 public boolean isInstrumentable() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
86 return true; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
87 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
88 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
89 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
90 public WrapperNode createWrapperNode() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
91 return new TestWrapperNode(this); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
92 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
93 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
94 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
95 @NodeInfo(cost = NodeCost.NONE) |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
96 public static class TestWrapperNode extends TestLanguageNode implements WrapperNode { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
97 @Child private TestLanguageNode child; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
98 @Child private ProbeNode probeNode; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
99 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
100 public TestWrapperNode(TestLanguageNode child) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
101 assert !(child instanceof TestWrapperNode); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
102 this.child = child; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
103 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
104 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
105 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
106 public String instrumentationInfo() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
107 return "Wrapper node for testing"; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
108 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
109 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
110 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
111 public boolean isInstrumentable() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
112 return false; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
113 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
114 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
115 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
116 public void insertProbe(ProbeNode newProbeNode) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
117 this.probeNode = newProbeNode; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
118 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
119 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
120 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
121 public Probe getProbe() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
122 try { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
123 return probeNode.getProbe(); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
124 } catch (IllegalStateException e) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
125 throw new IllegalStateException("Cannot call getProbe() on a wrapper that has no probe"); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
126 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
127 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
128 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
129 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
130 public Node getChild() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
131 return child; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
132 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
133 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
134 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
135 public Object execute(VirtualFrame frame) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
136 probeNode.enter(child, frame); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
137 Object result; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
138 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
139 try { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
140 result = child.execute(frame); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
141 probeNode.returnValue(child, frame, result); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
142 } catch (KillException e) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
143 throw (e); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
144 } catch (Exception e) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
145 probeNode.returnExceptional(child, frame, e); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
146 throw (e); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
147 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
148 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
149 return result; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
150 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
151 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
152 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
153 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
154 * Truffle requires that all guest languages to have a {@link RootNode} which sits atop any AST |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
155 * of the guest language. This is necessary since creating a {@link CallTarget} is how Truffle |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
156 * completes an AST. The root nodes serves as our entry point into a program. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
157 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
158 public static class TestRootNode extends RootNode { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
159 @Child private TestLanguageNode body; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
160 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
161 /** |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
162 * This constructor emulates the global machinery that applies registered probers to every |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
163 * newly created AST. Global registry is not used, since that would interfere with other |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
164 * tests run in the same environment. |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
165 */ |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
166 public TestRootNode(TestLanguageNode body) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
167 super(null); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
168 this.body = body; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
169 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
170 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
171 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
172 public Object execute(VirtualFrame frame) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
173 return body.execute(frame); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
174 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
175 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
176 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
177 public boolean isCloningAllowed() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
178 return true; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
179 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
180 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
181 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
182 public void applyInstrumentation() { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
183 Probe.applyASTProbers(body); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
184 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
185 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
186 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
187 public static class TestValueNode extends TestLanguageNode { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
188 private final int value; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
189 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
190 public TestValueNode(int value) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
191 this.value = value; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
192 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
193 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
194 public TestValueNode(int value, SourceSection srcSection) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
195 super(srcSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
196 this.value = value; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
197 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
198 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
199 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
200 public Object execute(VirtualFrame frame) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
201 return new Integer(this.value); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
202 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
203 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
204 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
205 public static class TestAddNode extends TestLanguageNode { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
206 @Child private TestLanguageNode leftChild; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
207 @Child private TestLanguageNode rightChild; |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
208 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
209 public TestAddNode(TestValueNode leftChild, TestValueNode rightChild, SourceSection sourceSection) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
210 super(sourceSection); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
211 this.leftChild = insert(leftChild); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
212 this.rightChild = insert(rightChild); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
213 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
214 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
215 @Override |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
216 public Object execute(VirtualFrame frame) { |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
217 return new Integer(((Integer) leftChild.execute(frame)).intValue() + ((Integer) rightChild.execute(frame)).intValue()); |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
218 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
219 } |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
220 |
cca166aa28c0
Truffle/Tools: unit tests for new framework and tool instances
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff
changeset
|
221 } |