# HG changeset patch # User Michael Van De Vanter # Date 1406942083 25200 # Node ID 88890729659020ed3568671f06dec65323a9b28f # Parent d654cd5ed05a480afb38c591cd3640bdee765ca9 Backed out changeset: d654cd5ed05a diff -r d654cd5ed05a -r 888907296590 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java --- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java Fri Aug 01 18:10:48 2014 -0700 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java Fri Aug 01 18:14:43 2014 -0700 @@ -24,7 +24,6 @@ import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; -import com.oracle.truffle.api.source.*; import com.oracle.truffle.api.utilities.*; import com.oracle.truffle.sl.nodes.*; import com.oracle.truffle.sl.runtime.*; @@ -50,8 +49,8 @@ private final BranchProfile exceptionTaken = new BranchProfile(); private final BranchProfile nullTaken = new BranchProfile(); - public SLFunctionBodyNode(SourceSection src, SLStatementNode bodyNode) { - super(src); + public SLFunctionBodyNode(SLStatementNode bodyNode) { + super(null); this.bodyNode = bodyNode; } diff -r d654cd5ed05a -r 888907296590 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java --- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java Fri Aug 01 18:10:48 2014 -0700 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java Fri Aug 01 18:14:43 2014 -0700 @@ -134,10 +134,8 @@ void Function() { Expect(4); Expect(1); - Token identifierToken = t; + factory.startFunction(t); Expect(5); - int bodyStartPos = t.charPos; - factory.startFunction(identifierToken, bodyStartPos); if (la.kind == 1) { Get(); factory.addFormalParameter(t); @@ -221,8 +219,8 @@ SLStatementNode IfStatement(boolean inLoop) { SLStatementNode result; Expect(14); + Expect(5); Token ifToken = t; - Expect(5); SLExpressionNode condition = Expression(); Expect(7); SLStatementNode thenPart = Block(inLoop); diff -r d654cd5ed05a -r 888907296590 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java --- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java Fri Aug 01 18:10:48 2014 -0700 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java Fri Aug 01 18:14:43 2014 -0700 @@ -65,9 +65,7 @@ private final Source source; /* State while parsing a function. */ - private int functionStartPos; private String functionName; - private int functionBodyStartPos; // includes parameter list private int parameterCount; private FrameDescriptor frameDescriptor; private List methodNodes; @@ -83,17 +81,13 @@ this.prober = prober; } - public void startFunction(Token nameToken, int bodyStartPos) { - assert functionStartPos == 0; + public void startFunction(Token nameToken) { assert functionName == null; - assert functionBodyStartPos == 0; assert parameterCount == 0; assert frameDescriptor == null; assert lexicalScope == null; - functionStartPos = nameToken.charPos; functionName = nameToken.val; - functionBodyStartPos = bodyStartPos; frameDescriptor = new FrameDescriptor(); methodNodes = new ArrayList<>(); startBlock(); @@ -106,26 +100,23 @@ * specialized. */ final SourceSection src = srcFromToken(nameToken); - final SLReadArgumentNode readArg = new SLReadArgumentNode(src, parameterCount); + SLReadArgumentNode readArg = new SLReadArgumentNode(src, parameterCount); methodNodes.add(createAssignment(nameToken, readArg)); parameterCount++; } public void finishFunction(SLStatementNode bodyNode) { methodNodes.add(bodyNode); - final int bodyEndPos = bodyNode.getSourceSection().getCharEndIndex(); - final SourceSection functionSrc = source.createSection(functionName, functionStartPos, bodyEndPos - functionStartPos); - final SLStatementNode methodBlock = finishBlock(methodNodes, functionBodyStartPos, bodyEndPos - functionBodyStartPos); + // TODO (mlvdv) testing + SLStatementNode methodBlock = finishBlock(methodNodes, -1, -1); assert lexicalScope == null : "Wrong scoping of blocks in parser"; - SLFunctionBodyNode functionBodyNode = new SLFunctionBodyNode(functionSrc, methodBlock); + SLFunctionBodyNode functionBodyNode = new SLFunctionBodyNode(methodBlock); SLRootNode rootNode = new SLRootNode(frameDescriptor, functionBodyNode, functionName); context.getFunctionRegistry().register(functionName, rootNode); - functionStartPos = 0; functionName = null; - functionBodyStartPos = 0; parameterCount = 0; frameDescriptor = null; lexicalScope = null; @@ -135,14 +126,14 @@ lexicalScope = new LexicalScope(lexicalScope); } - public SLStatementNode finishBlock(List bodyNodes, int startPos, int length) { + public SLStatementNode finishBlock(List bodyNodes, int lBracePos, int length) { lexicalScope = lexicalScope.outer; List flattenedNodes = new ArrayList<>(bodyNodes.size()); flattenBlocks(bodyNodes, flattenedNodes); - if (startPos >= 0) { - final SourceSection src = source.createSection("block", startPos, length); + if (lBracePos >= 0) { + final SourceSection src = source.createSection("block", lBracePos, length); return new SLBlockNode(src, flattenedNodes.toArray(new SLStatementNode[flattenedNodes.size()])); } if (flattenedNodes.size() == 0) { diff -r d654cd5ed05a -r 888907296590 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SimpleLanguage.atg --- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SimpleLanguage.atg Fri Aug 01 18:10:48 2014 -0700 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SimpleLanguage.atg Fri Aug 01 18:14:43 2014 -0700 @@ -66,9 +66,8 @@ Function = "function" -identifier (. Token identifierToken = t; .) -"(" (. int bodyStartPos = t.charPos; .) - (. factory.startFunction(identifierToken, bodyStartPos); .) +identifier (. factory.startFunction(t); .) +"(" [ identifier (. factory.addFormalParameter(t); .) { @@ -126,8 +125,8 @@ IfStatement = -"if" (. Token ifToken = t; .) -"(" +"if" +"(" (. Token ifToken = t; .) Expression ")" Block (. SLStatementNode elsePart = null; .)