private ForStatement ParseFor() { ForStatement node = new ForStatement(curtok); Advance(); // advance over FOR AssertAndAdvance(TokenID.LParen); if (curtok.ID != TokenID.Semi) { ExpressionNode expr = ParseLocalDeclarationOrExpression(); if (expr is LocalDeclaration) { node.Init = new NodeCollection<ExpressionNode>(); node.Init.Add(expr); } else { node.Init = new ExpressionList(); node.Init.Add(expr); while (curtok.ID == TokenID.Comma) { Advance(); node.Init.Add(ParseExpression()); } } } AssertAndAdvance(TokenID.Semi); if (curtok.ID != TokenID.Semi) node.Test = ParseExpression(); AssertAndAdvance(TokenID.Semi); if (curtok.ID != TokenID.RParen) { node.Inc = ParseExpressionList(); } AssertAndAdvance(TokenID.RParen); ParseBlock(node.Statements); if (curtok.ID == TokenID.Semi) { Advance(); } return node; }
private ForStatement ParseFor() { ForStatement node = new ForStatement(curtok); Advance(); // advance over FOR AssertAndAdvance(TokenID.LParen); if (curtok.ID != TokenID.Semi) { ExpressionNode expr = ParseExpression(); node.Init.Add(expr); while (curtok.ID == TokenID.Comma) { AssertAndAdvance(TokenID.Comma); expr = ParseExpression(); node.Init.Add(expr); } } AssertAndAdvance(TokenID.Semi); if (curtok.ID != TokenID.Semi) { node.Test.Add(ParseExpression()); while (curtok.ID == TokenID.Comma) { AssertAndAdvance(TokenID.Comma); node.Test.Add(ParseExpression()); } } AssertAndAdvance(TokenID.Semi); if (curtok.ID != TokenID.RParen) { node.Inc.Add(ParseExpression()); while (curtok.ID == TokenID.Comma) { AssertAndAdvance(TokenID.Comma); node.Inc.Add(ParseExpression()); } } AssertAndAdvance(TokenID.RParen); ParseBlock(node.Statements); if (curtok.ID == TokenID.Semi) { Advance(); } return node; }
public virtual object VisitForStatement(ForStatement forStatement, object data) { stackMap.Push(forStatement); forStatement.Init.AcceptVisitor(this, data); forStatement.Test.AcceptVisitor(this, data); forStatement.Inc.AcceptVisitor(this, data); forStatement.Statements.AcceptVisitor(this, data); stackMap.Pop(); return null; }