comparison truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLExpressionWrapperNode.java @ 22226:c896a8e70777

Truffle/Instrumentation: Redesign instrumentation node classes to reduce the public API exposure. - ProbeNode is no longer public - Public interface InstrumentationNode.TruffleEvents is now abstract class EventHandlerNode with package private constructor - Interface ProbeNode.WrapperNode is no longer inside ProbeNode and has been expanded slightly so ProbeNode can be package private
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Sun, 20 Sep 2015 15:51:39 -0700
parents dc83cc1f94f2
children 68a0c3dcea10
comparison
equal deleted inserted replaced
22225:a0fa69e3e60e 22226:c896a8e70777
39 * SOFTWARE. 39 * SOFTWARE.
40 */ 40 */
41 package com.oracle.truffle.sl.nodes.instrument; 41 package com.oracle.truffle.sl.nodes.instrument;
42 42
43 import com.oracle.truffle.api.frame.VirtualFrame; 43 import com.oracle.truffle.api.frame.VirtualFrame;
44 import com.oracle.truffle.api.instrument.EventHandlerNode;
44 import com.oracle.truffle.api.instrument.Instrument; 45 import com.oracle.truffle.api.instrument.Instrument;
45 import com.oracle.truffle.api.instrument.KillException; 46 import com.oracle.truffle.api.instrument.KillException;
46 import com.oracle.truffle.api.instrument.Probe; 47 import com.oracle.truffle.api.instrument.Probe;
47 import com.oracle.truffle.api.instrument.ProbeNode; 48 import com.oracle.truffle.api.instrument.WrapperNode;
48 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
49 import com.oracle.truffle.api.nodes.Node; 49 import com.oracle.truffle.api.nodes.Node;
50 import com.oracle.truffle.api.nodes.NodeCost; 50 import com.oracle.truffle.api.nodes.NodeCost;
51 import com.oracle.truffle.api.nodes.NodeInfo; 51 import com.oracle.truffle.api.nodes.NodeInfo;
52 import com.oracle.truffle.api.nodes.UnexpectedResultException; 52 import com.oracle.truffle.api.nodes.UnexpectedResultException;
53 import com.oracle.truffle.sl.nodes.SLExpressionNode; 53 import com.oracle.truffle.sl.nodes.SLExpressionNode;
61 * wrapper, and to which this wrapper routes execution events. 61 * wrapper, and to which this wrapper routes execution events.
62 */ 62 */
63 @NodeInfo(cost = NodeCost.NONE) 63 @NodeInfo(cost = NodeCost.NONE)
64 public final class SLExpressionWrapperNode extends SLExpressionNode implements WrapperNode { 64 public final class SLExpressionWrapperNode extends SLExpressionNode implements WrapperNode {
65 @Child private SLExpressionNode child; 65 @Child private SLExpressionNode child;
66 @Child private ProbeNode probeNode; 66 @Child private EventHandlerNode eventHandlerNode;
67 67
68 /** 68 /**
69 * Constructor. 69 * Constructor.
70 * 70 *
71 * @param child The {@link SLExpressionNode} that this wrapper is wrapping 71 * @param child The {@link SLExpressionNode} that this wrapper is wrapping
88 @Override 88 @Override
89 public SLExpressionNode getNonWrapperNode() { 89 public SLExpressionNode getNonWrapperNode() {
90 return child; 90 return child;
91 } 91 }
92 92
93 public void insertProbe(ProbeNode newProbeNode) { 93 public void insertEventHandlerNode(EventHandlerNode eventHandler) {
94 this.probeNode = newProbeNode; 94 this.eventHandlerNode = eventHandler;
95 } 95 }
96 96
97 public Probe getProbe() { 97 public Probe getProbe() {
98 return probeNode.getProbe(); 98 return eventHandlerNode.getProbe();
99 } 99 }
100 100
101 public Node getChild() { 101 public Node getChild() {
102 return child; 102 return child;
103 } 103 }
104 104
105 @Override 105 @Override
106 public Object executeGeneric(VirtualFrame vFrame) { 106 public Object executeGeneric(VirtualFrame vFrame) {
107 107
108 probeNode.enter(child, vFrame); 108 eventHandlerNode.enter(child, vFrame);
109 Object result; 109 Object result;
110 110
111 try { 111 try {
112 result = child.executeGeneric(vFrame); 112 result = child.executeGeneric(vFrame);
113 probeNode.returnValue(child, vFrame, result); 113 eventHandlerNode.returnValue(child, vFrame, result);
114 } catch (KillException e) { 114 } catch (KillException e) {
115 throw (e); 115 throw (e);
116 } catch (Exception e) { 116 } catch (Exception e) {
117 probeNode.returnExceptional(child, vFrame, e); 117 eventHandlerNode.returnExceptional(child, vFrame, e);
118 throw (e); 118 throw (e);
119 } 119 }
120 return result; 120 return result;
121 } 121 }
122 122
130 return SLTypesGen.expectBoolean(executeGeneric(vFrame)); 130 return SLTypesGen.expectBoolean(executeGeneric(vFrame));
131 } 131 }
132 132
133 @Override 133 @Override
134 public SLFunction executeFunction(VirtualFrame vFrame) throws UnexpectedResultException { 134 public SLFunction executeFunction(VirtualFrame vFrame) throws UnexpectedResultException {
135 probeNode.enter(child, vFrame); 135 eventHandlerNode.enter(child, vFrame);
136 SLFunction result; 136 SLFunction result;
137 137
138 try { 138 try {
139 result = child.executeFunction(vFrame); 139 result = child.executeFunction(vFrame);
140 probeNode.returnValue(child, vFrame, result); 140 eventHandlerNode.returnValue(child, vFrame, result);
141 } catch (Exception e) { 141 } catch (Exception e) {
142 probeNode.returnExceptional(child, vFrame, e); 142 eventHandlerNode.returnExceptional(child, vFrame, e);
143 throw (e); 143 throw (e);
144 } 144 }
145 return result; 145 return result;
146 } 146 }
147 147