From 1c7a3a96e512147e818f1e7979eee884ca238067 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Sat, 2 Apr 2022 03:03:06 +0200 Subject: [PATCH] Shader/SourceLocation: Fix column index --- .../Shader/ShaderLangSourceLocation.inl | 2 +- src/Nazara/Shader/ShaderLangLexer.cpp | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/Nazara/Shader/ShaderLangSourceLocation.inl b/include/Nazara/Shader/ShaderLangSourceLocation.inl index 7d587f3ed..6f09e732c 100644 --- a/include/Nazara/Shader/ShaderLangSourceLocation.inl +++ b/include/Nazara/Shader/ShaderLangSourceLocation.inl @@ -79,7 +79,7 @@ namespace Nz::ShaderLang inline bool SourceLocation::IsValid() const { - return startLine != 0 && endLine != 0 && endColumn != 0 && startColumn != 0; + return startLine != 0 || endLine != 0 || endColumn != 0 || startColumn != 0; } } diff --git a/src/Nazara/Shader/ShaderLangLexer.cpp b/src/Nazara/Shader/ShaderLangLexer.cpp index 36b87d8a8..60d107f66 100644 --- a/src/Nazara/Shader/ShaderLangLexer.cpp +++ b/src/Nazara/Shader/ShaderLangLexer.cpp @@ -78,7 +78,7 @@ namespace Nz::ShaderLang return std::isalnum(c) || c == '_'; }; - unsigned int lineNumber = 1; + UInt32 currentLine = 1; std::size_t lastLineFeed = 0; std::vector tokens; @@ -91,8 +91,8 @@ namespace Nz::ShaderLang char c = Peek(0); Token token; - token.location.startColumn = static_cast(currentPos - lastLineFeed); - token.location.startLine = lineNumber; + token.location.startColumn = SafeCast(currentPos - lastLineFeed) + 1; + token.location.startLine = currentLine; token.location.file = currentFile; if (c == '\0') @@ -112,7 +112,7 @@ namespace Nz::ShaderLang case '\n': { - lineNumber++; + currentLine++; lastLineFeed = currentPos; break; } @@ -169,7 +169,7 @@ namespace Nz::ShaderLang } else if (next == '\n') { - lineNumber++; + currentLine++; lastLineFeed = currentPos + 1; } } @@ -223,7 +223,7 @@ namespace Nz::ShaderLang currentPos++; } - token.location.endColumn = static_cast(currentPos - lastLineFeed); + token.location.endColumn = SafeCast(currentPos - lastLineFeed) + 1; if (floatingPoint) { @@ -413,7 +413,7 @@ namespace Nz::ShaderLang case '\0': case '\n': case '\r': - token.location.endColumn = static_cast(currentPos - lastLineFeed); + token.location.endColumn = SafeCast(currentPos - lastLineFeed) + 1; throw LexerUnfinishedStringError{ token.location }; case '\\': @@ -428,7 +428,7 @@ namespace Nz::ShaderLang case '"': character = '"'; break; case '\\': character = '\\'; break; default: - token.location.endColumn = static_cast(currentPos - lastLineFeed); + token.location.endColumn = SafeCast(currentPos - lastLineFeed) + 1; throw LexerUnrecognizedCharError{ token.location }; } break; @@ -475,8 +475,8 @@ namespace Nz::ShaderLang if (tokenType) { - token.location.endColumn = static_cast(currentPos - lastLineFeed); - token.location.endLine = lineNumber; + token.location.endColumn = SafeCast(currentPos - lastLineFeed) + 1; + token.location.endLine = currentLine; token.type = *tokenType; tokens.push_back(std::move(token));