Mercurial > hg > truffle
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 |