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);
}