From 16d50b331177b673ff037b108c8a4a75385e9c3e Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 17 Nov 2018 14:37:41 +0100 Subject: [PATCH] Fix text spans being too long (using end pos as length) --- Upsilon/Parser/ExpressionSyntax/BinaryExpressionSyntax.cs | 2 +- Upsilon/Parser/StatementSyntax/AssignmentExpressionSyntax.cs | 2 +- Upsilon/Parser/StatementSyntax/BlockStatementSyntax.cs | 2 +- Upsilon/Text/TextSpan.cs | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Upsilon/Parser/ExpressionSyntax/BinaryExpressionSyntax.cs b/Upsilon/Parser/ExpressionSyntax/BinaryExpressionSyntax.cs index 9d9152f..769976b 100644 --- a/Upsilon/Parser/ExpressionSyntax/BinaryExpressionSyntax.cs +++ b/Upsilon/Parser/ExpressionSyntax/BinaryExpressionSyntax.cs @@ -10,7 +10,7 @@ namespace Upsilon.Parser Left = left; Operator = @operator; Right = right; - Span = new TextSpan(left.Span.Start, right.Span.End); + Span = new TextSpan(left.Span.Start, right.Span.End - left.Span.Start); } public override SyntaxKind Kind => SyntaxKind.BinaryExpression; diff --git a/Upsilon/Parser/StatementSyntax/AssignmentExpressionSyntax.cs b/Upsilon/Parser/StatementSyntax/AssignmentExpressionSyntax.cs index ca731b8..de50fc5 100644 --- a/Upsilon/Parser/StatementSyntax/AssignmentExpressionSyntax.cs +++ b/Upsilon/Parser/StatementSyntax/AssignmentExpressionSyntax.cs @@ -13,7 +13,7 @@ namespace Upsilon.Parser EqualsToken = equalsToken; Expression = expression; var start = LocalToken?.Span.Start ?? Identifier.Span.Start; - Span = new TextSpan(start, Expression.Span.End); + Span = new TextSpan(start, Expression.Span.End - start); } public override SyntaxKind Kind => SyntaxKind.AssignmentStatement; diff --git a/Upsilon/Parser/StatementSyntax/BlockStatementSyntax.cs b/Upsilon/Parser/StatementSyntax/BlockStatementSyntax.cs index 8c3c052..2b6c555 100644 --- a/Upsilon/Parser/StatementSyntax/BlockStatementSyntax.cs +++ b/Upsilon/Parser/StatementSyntax/BlockStatementSyntax.cs @@ -13,7 +13,7 @@ namespace Upsilon.Parser var first = statements.FirstOrDefault(); var last = statements.LastOrDefault(); if (first != null && last != null) - Span = new TextSpan(first.Span.Start, last.Span.End); + Span = new TextSpan(first.Span.Start, last.Span.End - first.Span.Start); } public ImmutableArray Statements { get; } diff --git a/Upsilon/Text/TextSpan.cs b/Upsilon/Text/TextSpan.cs index 2f6264d..b2bf44f 100644 --- a/Upsilon/Text/TextSpan.cs +++ b/Upsilon/Text/TextSpan.cs @@ -11,5 +11,10 @@ namespace Upsilon.Text public int Start { get; } public int Length { get; } public int End => Start + Length; + + public override string ToString() + { + return $"{Start} - {End}"; + } } } \ No newline at end of file