private StatementSyntax ParseDeclarationStatement()
{
var typedefKeyword = NextTokenIf(SyntaxKind.TypedefKeyword);
var mods = new List<SyntaxToken>();
var variables = new List<SyntaxNode>();
ParseDeclarationModifiers(mods);
var type = ParseType(false);
if (typedefKeyword != null)
{
ParseTypeAliases(variables);
var semi = Match(SyntaxKind.SemiToken);
return new TypedefStatementSyntax(typedefKeyword, mods, type, new SeparatedSyntaxList<TypeAliasSyntax>(variables), semi);
}
if (type is TypeDefinitionSyntax && (Current.Kind == SyntaxKind.SemiToken || Current.Kind == SyntaxKind.EndOfFileToken))
{
var semi = Match(SyntaxKind.SemiToken);
return new TypeDeclarationStatementSyntax(mods, (TypeDefinitionSyntax) type, semi);
}
else
{
ParseVariableDeclarators(type, variables, variableDeclarationsExpected: true);
var semi = Match(SyntaxKind.SemiToken);
var variableDeclaration = new VariableDeclarationSyntax(mods, type, new SeparatedSyntaxList<VariableDeclaratorSyntax>(variables));
return new VariableDeclarationStatementSyntax(variableDeclaration, semi);
}
}