ShaderTools.Hlsl.Parser.HlslParser.ParseForStatement C# (CSharp) Method

ParseForStatement() private method

private ParseForStatement ( List attributes ) : ForStatementSyntax
attributes List
return ForStatementSyntax
        private ForStatementSyntax ParseForStatement(List<AttributeSyntax> attributes)
        {
            var @for = Match(SyntaxKind.ForKeyword);
            var openParen = Match(SyntaxKind.OpenParenToken);

            var resetPoint = GetResetPoint();
            ExpressionSyntax initializer = null;
            ExpressionSyntax incrementor = null;

            // Here can be either a declaration or an expression statement list.  Scan
            // for a declaration first.
            ScanTypeFlags st = ScanType();

            VariableDeclarationSyntax decl = null;

            if (st != ScanTypeFlags.NotType && Current.Kind == SyntaxKind.IdentifierToken)
            {
                Reset(ref resetPoint);
                decl = ParseVariableDeclaration();
            }
            else
            {
                // Not a type followed by an identifier, so it must be an expression list.
                Reset(ref resetPoint);
                if (Current.Kind != SyntaxKind.SemiToken)
                    initializer = ParseExpression();
            }

            var semi = Match(SyntaxKind.SemiToken);

            ExpressionSyntax condition = null;
            if (Current.Kind != SyntaxKind.SemiToken)
                condition = ParseExpression();

            var semi2 = Match(SyntaxKind.SemiToken);

            if (Current.Kind != SyntaxKind.CloseParenToken)
                incrementor = ParseExpression();

            var closeParen = Match(SyntaxKind.CloseParenToken);
            var statement = ParseEmbeddedStatement();

            return new ForStatementSyntax(attributes, @for, openParen, decl,
                initializer, semi, condition, semi2, 
                incrementor, closeParen, statement);
        }
HlslParser