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

ParseStructType() private method

private ParseStructType ( ) : StructTypeSyntax
return StructTypeSyntax
        private StructTypeSyntax ParseStructType()
        {
            var @struct = Match(SyntaxKind.StructKeyword);

            // Name is optional -  but if omitted, this *must* be part of a variable declaration.
            var name = NextTokenIf(SyntaxKind.IdentifierToken);

            BaseListSyntax baseList = null;
            if (Current.Kind == SyntaxKind.ColonToken)
                baseList = ParseBaseList();

            var openBrace = Match(SyntaxKind.OpenBraceToken);

            var fields = new List<VariableDeclarationStatementSyntax>();
            while (Current.Kind != SyntaxKind.CloseBraceToken)
            {
                if (IsPossibleVariableDeclarationStatement())
                {
                    fields.Add(ParseVariableDeclarationStatement());
                }
                else
                {
                    var action = SkipBadTokens(
                        p => !p.IsPossibleVariableDeclarationStatement(),
                        p => p.IsTerminator(),
                        SyntaxKind.CloseBraceToken);
                    if (action == PostSkipAction.Abort)
                        break;
                }
            }

            var closeBrace = Match(SyntaxKind.CloseBraceToken);

            return new StructTypeSyntax(@struct, name, baseList, openBrace, fields, closeBrace);
        }
HlslParser