Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java @ 16595:618d92152d3c
SL: Added support for instrumentation.
author | David Piorkowski <david.piorkowski@oracle.com> |
---|---|
date | Thu, 24 Jul 2014 16:14:44 -0700 |
parents | abe7128ca473 |
children | 0fc43b066eee |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java Thu Jul 24 12:22:54 2014 -0700 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java Thu Jul 24 16:14:44 2014 -0700 @@ -32,6 +32,7 @@ import com.oracle.truffle.sl.nodes.call.*; import com.oracle.truffle.sl.nodes.controlflow.*; import com.oracle.truffle.sl.nodes.expression.*; +import com.oracle.truffle.sl.nodes.instrument.*; import com.oracle.truffle.sl.nodes.local.*; import com.oracle.truffle.sl.runtime.*; @@ -72,9 +73,12 @@ /* State while parsing a block. */ private LexicalScope lexicalScope; - public SLNodeFactory(SLContext context, Source source) { + private final SLNodeProber prober; + + public SLNodeFactory(SLContext context, Source source, SLNodeProber prober) { this.context = context; this.source = source; + this.prober = prober; } public void startFunction(Token nameToken) { @@ -179,6 +183,14 @@ public SLStatementNode createIf(Token t, SLExpressionNode conditionNode, SLStatementNode thenPartNode, SLStatementNode elsePartNode) { final int start = t.charPos; final int end = elsePartNode == null ? thenPartNode.getSourceSection().getCharEndIndex() : elsePartNode.getSourceSection().getCharEndIndex(); + + // if (prober != null) { + // SLStatementNode wrappedThenNode = prober.probeAsStatement(thenPartNode); + // // SLStatementNode wrappedElseNode = prober.probeAsStatement(elsePartNode); + // return new SLIfNode(source.createSection(t.val, start, end - start), conditionNode, + // wrappedThenNode, elsePartNode); + // } + return new SLIfNode(source.createSection(t.val, start, end - start), conditionNode, thenPartNode, elsePartNode); } @@ -227,6 +239,10 @@ final int endPos = finalToken.charPos + finalToken.val.length(); final SourceSection src = source.createSection(nameToken.val, startPos, endPos - startPos); SLExpressionNode functionNode = createRead(nameToken); + if (prober != null) { + SLExpressionNode wrappedNode = prober.probeAsCall(functionNode, nameToken.val); + return SLInvokeNode.create(src, wrappedNode, parameterNodes.toArray(new SLExpressionNode[parameterNodes.size()])); + } return SLInvokeNode.create(src, functionNode, parameterNodes.toArray(new SLExpressionNode[parameterNodes.size()])); } @@ -235,6 +251,10 @@ lexicalScope.locals.put(nameToken.val, frameSlot); final int start = nameToken.charPos; final int length = valueNode.getSourceSection().getCharEndIndex() - start; + if (prober != null) { + final SLExpressionNode wrappedNode = prober.probeAsLocalAssignment(valueNode, nameToken.val); + return SLWriteLocalVariableNodeFactory.create(source.createSection("=", start, length), wrappedNode, frameSlot); + } return SLWriteLocalVariableNodeFactory.create(source.createSection("=", start, length), valueNode, frameSlot); }