ShaderTools.Hlsl.Parser.DirectiveParser.ParseFunctionLikeDefineDirective C# (CSharp) Method

ParseFunctionLikeDefineDirective() private method

private ParseFunctionLikeDefineDirective ( SyntaxToken hash, SyntaxToken keyword, SyntaxToken name, bool isActive ) : FunctionLikeDefineDirectiveTriviaSyntax
hash SyntaxToken
keyword SyntaxToken
name SyntaxToken
isActive bool
return FunctionLikeDefineDirectiveTriviaSyntax
        private FunctionLikeDefineDirectiveTriviaSyntax ParseFunctionLikeDefineDirective(SyntaxToken hash, SyntaxToken keyword, SyntaxToken name, bool isActive)
        {
            var openParen = Match(SyntaxKind.OpenParenToken);

            var paramList = new List<SyntaxNode>();
            if (Current.Kind != SyntaxKind.CloseParenToken)
            {
                paramList.Add(Match(SyntaxKind.IdentifierToken));

                while (Current.Kind == SyntaxKind.CommaToken)
                {
                    paramList.Add(Match(SyntaxKind.CommaToken));

                    switch (Current.Kind)
                    {
                        case SyntaxKind.IdentifierToken:
                            paramList.Add(Match(SyntaxKind.IdentifierToken));
                            break;

                        default:
                            if (Current.Kind.IsKeyword())
                            {
                                paramList.Add(NextToken().WithKind(SyntaxKind.IdentifierToken));
                                break;
                            }
                            goto case SyntaxKind.IdentifierToken;
                    }
                }
            }

            var closeParen = Match(SyntaxKind.CloseParenToken);

            var parameters = new FunctionLikeDefineDirectiveParameterListSyntax(openParen, new SeparatedSyntaxList<SyntaxToken>(paramList), closeParen);

            var body = new List<SyntaxToken>();
            while (Current.Kind != SyntaxKind.EndOfDirectiveToken)
                body.Add(NextToken());

            var eod = ParseEndOfDirective(name.IsMissing);

            return new FunctionLikeDefineDirectiveTriviaSyntax(hash, keyword, name, parameters, body, eod, isActive);
        }