Style fixes

This commit is contained in:
Alexander Luzgarev 2020-07-24 10:00:48 +02:00
parent 165cd35485
commit c70e94d166
8 changed files with 60 additions and 102 deletions

View File

@ -13,7 +13,7 @@ namespace Parser.Binding
{ {
private readonly DiagnosticsBag _diagnostics = new DiagnosticsBag(); private readonly DiagnosticsBag _diagnostics = new DiagnosticsBag();
private BoundProgram? BindProgramInternal(SyntaxTree syntaxTree) private BoundProgram BindProgramInternal(SyntaxTree syntaxTree)
{ {
var boundRoot = BindRoot(syntaxTree.NullRoot); var boundRoot = BindRoot(syntaxTree.NullRoot);
var statements = ((BoundBlockStatement)boundRoot.File.Body).Statements; var statements = ((BoundBlockStatement)boundRoot.File.Body).Statements;
@ -31,7 +31,11 @@ namespace Parser.Binding
{ {
_diagnostics.ReportMainIsNotAllowed( _diagnostics.ReportMainIsNotAllowed(
f.Syntax.Span); f.Syntax.Span);
return null; return new BoundProgram(
_diagnostics.ToImmutableArray(),
mainFunction: null,
scriptFunction: null,
functions: functionsBuilder.ToImmutable());
} }
} }
@ -70,7 +74,7 @@ namespace Parser.Binding
functionsBuilder.ToImmutable()); functionsBuilder.ToImmutable());
} }
public static BoundProgram? BindProgram(SyntaxTree syntaxTree) public static BoundProgram BindProgram(SyntaxTree syntaxTree)
{ {
var binder = new Binder(); var binder = new Binder();
return binder.BindProgramInternal(syntaxTree); return binder.BindProgramInternal(syntaxTree);

View File

@ -858,46 +858,40 @@ namespace Parser.Internal
List<SyntaxTrivia> leadingTrivia, List<SyntaxTrivia> leadingTrivia,
List<SyntaxTrivia> trailingTrivia) List<SyntaxTrivia> trailingTrivia)
{ {
switch (tokenInfo.Kind) return tokenInfo.Kind switch
{ {
case TokenKind.IdentifierToken: TokenKind.IdentifierToken => TokenFactory.CreateIdentifier(
return TokenFactory.CreateIdentifier( tokenInfo.Text,
tokenInfo.Text, leadingTrivia,
leadingTrivia, trailingTrivia),
trailingTrivia); TokenKind.UnquotedStringLiteralToken => TokenFactory.CreateUnquotedStringLiteral(
case TokenKind.UnquotedStringLiteralToken: tokenInfo.Text,
return TokenFactory.CreateUnquotedStringLiteral( tokenInfo.StringValue,
tokenInfo.Text, leadingTrivia,
tokenInfo.StringValue, trailingTrivia),
leadingTrivia, TokenKind.NumberLiteralToken => TokenFactory.CreateTokenWithValueAndTrivia<double>(
trailingTrivia); tokenInfo.Kind,
case TokenKind.NumberLiteralToken: tokenInfo.Text,
return TokenFactory.CreateTokenWithValueAndTrivia<double>( tokenInfo.DoubleValue,
tokenInfo.Kind, leadingTrivia,
tokenInfo.Text, trailingTrivia),
tokenInfo.DoubleValue, TokenKind.StringLiteralToken => TokenFactory.CreateTokenWithValueAndTrivia<string>(
leadingTrivia, tokenInfo.Kind,
trailingTrivia); tokenInfo.Text,
case TokenKind.StringLiteralToken: tokenInfo.StringValue,
return TokenFactory.CreateTokenWithValueAndTrivia<string>( leadingTrivia,
tokenInfo.Kind, trailingTrivia),
tokenInfo.Text, TokenKind.DoubleQuotedStringLiteralToken => TokenFactory.CreateTokenWithValueAndTrivia<string>(
tokenInfo.StringValue, tokenInfo.Kind,
leadingTrivia, tokenInfo.Text,
trailingTrivia); tokenInfo.StringValue,
case TokenKind.DoubleQuotedStringLiteralToken: leadingTrivia,
return TokenFactory.CreateTokenWithValueAndTrivia<string>( trailingTrivia),
tokenInfo.Kind, _ => TokenFactory.CreateTokenWithTrivia(
tokenInfo.Text, tokenInfo.Kind,
tokenInfo.StringValue, leadingTrivia,
leadingTrivia, trailingTrivia),
trailingTrivia); };
default:
return TokenFactory.CreateTokenWithTrivia(
tokenInfo.Kind,
leadingTrivia,
trailingTrivia);
}
} }
public List<(SyntaxToken, Position)> ParseAll() public List<(SyntaxToken, Position)> ParseAll()

View File

@ -76,17 +76,6 @@ namespace Parser.Internal
return token; return token;
} }
private SyntaxToken? PossiblyEatIdentifier(string s)
{
var token = CurrentToken;
if (token.Kind == TokenKind.IdentifierToken && token.Text == s)
{
return EatToken();
}
return null;
}
private SyntaxToken EatPossiblyMissingIdentifier(string s) private SyntaxToken EatPossiblyMissingIdentifier(string s)
{ {
var token = CurrentToken; var token = CurrentToken;
@ -300,43 +289,20 @@ namespace Parser.Internal
return builder.ToList(); return builder.ToList();
} }
private ExpressionSyntaxNode? ParseTerm(ParseOptions options) private ExpressionSyntaxNode ParseTerm(ParseOptions options)
{ {
var token = CurrentToken; var token = CurrentToken;
ExpressionSyntaxNode? expression = null; ExpressionSyntaxNode expression = token.Kind switch
switch (token.Kind)
{ {
case TokenKind.NumberLiteralToken: TokenKind.NumberLiteralToken => Factory.NumberLiteralExpressionSyntax(EatToken()),
expression = Factory.NumberLiteralExpressionSyntax(EatToken()); TokenKind.StringLiteralToken => Factory.StringLiteralExpressionSyntax(EatToken()),
break; TokenKind.DoubleQuotedStringLiteralToken => Factory.DoubleQuotedStringLiteralExpressionSyntax(EatToken()),
case TokenKind.StringLiteralToken: TokenKind.OpenSquareBracketToken => ParseArrayLiteral(),
expression = Factory.StringLiteralExpressionSyntax(EatToken()); TokenKind.OpenBraceToken => ParseCellArrayLiteral(),
break; TokenKind.ColonToken => Factory.EmptyExpressionSyntax(),
case TokenKind.DoubleQuotedStringLiteralToken: TokenKind.OpenParenthesisToken => ParseParenthesizedExpression(),
expression = Factory.DoubleQuotedStringLiteralExpressionSyntax(EatToken()); _ => Factory.IdentifierNameExpressionSyntax(EatToken(TokenKind.IdentifierToken)),
break; };
case TokenKind.OpenSquareBracketToken:
expression = ParseArrayLiteral();
break;
case TokenKind.OpenBraceToken:
expression = ParseCellArrayLiteral();
break;
case TokenKind.ColonToken:
expression = Factory.EmptyExpressionSyntax();
break;
case TokenKind.OpenParenthesisToken:
expression = ParseParenthesizedExpression();
break;
default:
var id = EatToken(TokenKind.IdentifierToken);
expression = Factory.IdentifierNameExpressionSyntax(id);
break;
}
if (expression == null)
{
return null;
}
return ParsePostfix(options, expression); return ParsePostfix(options, expression);
} }
@ -599,10 +565,6 @@ namespace Parser.Internal
else else
{ {
lhs = ParseTerm(options); lhs = ParseTerm(options);
if (lhs is null)
{
throw new Exception("Left-hand side in subexpression cannot be empty.");
}
} }
while (true) while (true)
@ -858,8 +820,7 @@ namespace Parser.Internal
private bool TriviaContainsNewLine(GreenNode? trivia) private bool TriviaContainsNewLine(GreenNode? trivia)
{ {
var triviaList = trivia as SyntaxList<SyntaxTrivia>; if (trivia is not SyntaxList<SyntaxTrivia> triviaList)
if (triviaList is null)
{ {
return false; return false;
} }

View File

@ -121,11 +121,11 @@ namespace Parser.Internal
public override GreenNode? GetSlot(int i) public override GreenNode? GetSlot(int i)
{ {
switch (i) return i switch
{ {
case 0: return _file; 0 => _file,
default: return null; _ => null,
} };
} }
public override GreenNode SetDiagnostics(TokenDiagnostic[] diagnostics) public override GreenNode SetDiagnostics(TokenDiagnostic[] diagnostics)

View File

@ -13,7 +13,7 @@ namespace Parser.MFunctions
} }
} }
public static int Len(MObject? obj) public static int Len(MObject obj)
{ {
return obj switch return obj switch
{ {

View File

@ -51,7 +51,7 @@ namespace Parser
public override bool Equals(object? obj) public override bool Equals(object? obj)
{ {
if (ReferenceEquals(null, obj)) return false; if (obj is null) return false;
return obj is SyntaxToken token && Equals(token); return obj is SyntaxToken token && Equals(token);
} }

View File

@ -58,8 +58,7 @@ namespace Semantics
public static MClass FromTree(FileSyntaxNode tree, string fileName) public static MClass FromTree(FileSyntaxNode tree, string fileName)
{ {
var classDeclaration = tree.Body.Statements[0].AsNode() as ClassDeclarationSyntaxNode; if (tree.Body.Statements[0].AsNode() is not ClassDeclarationSyntaxNode classDeclaration)
if (classDeclaration == null)
{ {
return null; return null;
} }

View File

@ -27,7 +27,7 @@ namespace cmi
var child = children[index]; var child = children[index];
if (child.IsNode) if (child.IsNode)
{ {
RenderNode(child.AsNode(), indent, index == last); RenderNode(child.AsNode()!, indent, index == last);
} }
else if (child.IsToken) else if (child.IsToken)
{ {