Mercurial > hg > truffle
changeset 22302:0bd25f39d655
Truffle/SL: change default ASTProber policy to eliminate debugger halts on SLStatement nodes that aren't statements: function body, block, and the assignments from araguments to locals that begin each function body.
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Mon, 12 Oct 2015 12:51:38 -0400 |
parents | 145f995cd2fe |
children | 1362f35d1f5e |
files | truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLDebugTest.java truffle/com.oracle.truffle.sl.test/src/tests_instrumentation/Instrumentation_assnCount.output truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStandardASTProber.java |
diffstat | 3 files changed, 25 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLDebugTest.java Fri Oct 09 12:17:58 2015 -0400 +++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLDebugTest.java Mon Oct 12 12:51:38 2015 -0400 @@ -141,7 +141,7 @@ assertEquals("one var slot", 1, frame.getFrameDescriptor().getSlots().size()); Object resName = frame.getFrameDescriptor().getSlots().get(0).getFrameDescriptor().getIdentifiers().iterator().next(); assertEquals("res", resName); - suspendedEvent.prepareStepInto(2); + suspendedEvent.prepareStepInto(1); suspendedEvent = null; return null; } @@ -150,7 +150,7 @@ run(new Callable<Void>() { @Override public Void call() throws Exception { - assertLine(6); + assertLine(7); final MaterializedFrame frame = suspendedEvent.getFrame(); assertEquals("One argument", 1, frame.getArguments().length); @@ -165,10 +165,7 @@ @Override public Void call() throws Exception { assertNotNull(suspendedEvent); - - // XXX wrong step over: - // assertLine(7); - + assertLine(10); suspendedEvent.prepareContinue(); suspendedEvent = null; return null;
--- a/truffle/com.oracle.truffle.sl.test/src/tests_instrumentation/Instrumentation_assnCount.output Fri Oct 09 12:17:58 2015 -0400 +++ b/truffle/com.oracle.truffle.sl.test/src/tests_instrumentation/Instrumentation_assnCount.output Mon Oct 12 12:51:38 2015 -0400 @@ -1,4 +1,3 @@ -100 0 1 2
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStandardASTProber.java Fri Oct 09 12:17:58 2015 -0400 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStandardASTProber.java Mon Oct 12 12:51:38 2015 -0400 @@ -53,7 +53,10 @@ import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.sl.nodes.SLExpressionNode; import com.oracle.truffle.sl.nodes.SLStatementNode; +import com.oracle.truffle.sl.nodes.controlflow.SLBlockNode; +import com.oracle.truffle.sl.nodes.controlflow.SLFunctionBodyNode; import com.oracle.truffle.sl.nodes.controlflow.SLWhileNode; +import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode; import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode; /** @@ -65,16 +68,22 @@ public void probeAST(final Instrumenter instrumenter, RootNode startNode) { startNode.accept(new NodeVisitor() { - /** - * Instruments and tags all relevant {@link SLStatementNode}s and - * {@link SLExpressionNode}s. Currently, only SLStatementNodes that are not - * SLExpressionNodes are tagged as statements. - */ public boolean visit(Node node) { if (!(node instanceof InstrumentationNode) && node instanceof SLStatementNode && node.getParent() != null && node.getSourceSection() != null) { - // All SL nodes are instrumentable, but treat expressions specially + + // Skip nodes that don't really correspond to statements + if (node instanceof SLFunctionBodyNode || node instanceof SLBlockNode || node instanceof SLReadArgumentNode) { + return true; + } + // Skip synthetic statements at beginning of function body that assign locals + if (node instanceof SLWriteLocalVariableNode) { + final Node child = node.getChildren().iterator().next(); + if (child instanceof SLReadArgumentNode) { + return true; + } + } if (node instanceof SLExpressionNode) { SLExpressionNode expressionNode = (SLExpressionNode) node; final Probe probe = instrumenter.probe(expressionNode); @@ -83,11 +92,13 @@ probe.tagAs(ASSIGNMENT, null); } } else { - SLStatementNode statementNode = (SLStatementNode) node; - final Probe probe = instrumenter.probe(statementNode); - probe.tagAs(STATEMENT, null); - if (node instanceof SLWhileNode) { - probe.tagAs(START_LOOP, null); + if (!(node.getParent() instanceof SLFunctionBodyNode)) { + SLStatementNode statementNode = (SLStatementNode) node; + final Probe probe = instrumenter.probe(statementNode); + probe.tagAs(STATEMENT, null); + if (node instanceof SLWhileNode) { + probe.tagAs(START_LOOP, null); + } } } }