Mercurial > hg > truffle
diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLExpressionNode.java @ 18485:e3c95cbbb50c
Truffle Instrumentation: major API revision, based around the Probe and Instrument classes; add Instrumentable API for language implementors, with most details automated; reimplemented to handle AST splitting automatically; more JUnit tests.
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Sun, 23 Nov 2014 16:07:23 -0800 |
parents | f0c3de09f12a |
children | ccb97347d874 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLExpressionNode.java Fri Nov 21 13:16:02 2014 +0100 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLExpressionNode.java Sun Nov 23 16:07:23 2014 -0800 @@ -95,19 +95,39 @@ Node parent = getParent(); if (parent == null) { - throw new IllegalStateException("Cannot probe a node without a parent"); + throw new IllegalStateException("Cannot call probe() a node without a parent."); } - if (parent instanceof SLExpressionWrapper) { - return ((SLExpressionWrapper) parent).getProbe(); + if (parent instanceof SLExpressionWrapperNode) { + return ((SLExpressionWrapperNode) parent).getProbe(); } // Create a new wrapper/probe with this node as its child. - final SLExpressionWrapper wrapper = new SLExpressionWrapper(getRootNodeSLContext(this), this); + final SLExpressionWrapperNode wrapper = new SLExpressionWrapperNode(this); + + // Connect it to a Probe + final Probe probe = ProbeNode.insertProbe(wrapper); // Replace this node in the AST with the wrapper this.replace(wrapper); - return wrapper.getProbe(); + return probe; + } + + @Override + public void probeLite(TruffleEventReceiver eventReceiver) { + Node parent = getParent(); + + if (parent == null) { + throw new IllegalStateException("Cannot call probeLite() on a node without a parent."); + } + + if (parent instanceof SLExpressionWrapperNode) { + throw new IllegalStateException("Cannot call probeLite() on a node that already has a wrapper."); + } + final SLExpressionWrapperNode wrapper = new SLExpressionWrapperNode(this); + ProbeNode.insertProbeLite(wrapper, eventReceiver); + + this.replace(wrapper); } }