Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl
diff options
context:
space:
mode:
2 files changed, 14 insertions, 6 deletions
-rw-r--r--JSImpl/src/Lexer.cpp13
-rw-r--r--JSImpl/test/LexerTests.cpp7
diff --git a/JSImpl/src/Lexer.cpp b/JSImpl/src/Lexer.cpp
index ae6613a..0f6f4a6 100644
--- a/JSImpl/src/Lexer.cpp
+++ b/JSImpl/src/Lexer.cpp
@@ -79,7 +79,7 @@ private:
inline Token ProduceSkipToken();
inline Token ProduceToken(TokenType type);
- inline Token ProduceToken(TokenType type, IPLString lexeme, double number);
+ inline Token ProduceToken(TokenType type, const IPLString& lexeme, double number);
inline Token ProduceErrorToken();
inline Token ProduceInvalidToken();
@@ -186,7 +186,7 @@ LexerResult Tokenizer::Tokenize()
{
token = NextToken();
- if (m_GenerationState == State::Error)
+ if (m_GenerationState == State::Error )
{
result.IsSuccessful = false;
result.Error = IPLError(m_Error);
@@ -196,7 +196,7 @@ LexerResult Tokenizer::Tokenize()
{
result.tokens.emplace_back(token);
}
- } while (token.Type != TokenType::Eof);
+ } while (token.Type != TokenType::Eof && token.Type != TokenType::Invalid);
return result;
}
@@ -245,7 +245,7 @@ inline void Tokenizer::NextLine()
m_LastTokenPozition = m_Column = 0;
}
-inline Token Tokenizer::ProduceToken(TokenType type, IPLString lexeme, double number = 0.0)
+inline Token Tokenizer::ProduceToken(TokenType type,const IPLString& lexeme, double number = 0.0)
{
auto token = Token{ type, m_Line, m_LastTokenPozition, lexeme, number };
m_LastTokenPozition = m_Column;
@@ -348,7 +348,8 @@ inline Token Tokenizer::ProduceErrorToken()
inline Token Tokenizer::ProduceInvalidToken()
{
- return ProduceToken(TokenType::Invalid, "");
+ SetError("Invalid or unexpected token");
+ RETURN_ERROR(ProduceToken(TokenType::Invalid, ""));
}
IPLString Tokenizer::ParseComment()
@@ -574,5 +575,5 @@ Token Tokenizer::NextToken()
return ProduceToken(identifier.Type, identifier.Content);
}
- return ProduceErrorToken();
+ return ProduceInvalidToken();
}
diff --git a/JSImpl/test/LexerTests.cpp b/JSImpl/test/LexerTests.cpp
index a1a25d3..965730e 100644
--- a/JSImpl/test/LexerTests.cpp
+++ b/JSImpl/test/LexerTests.cpp
@@ -212,3 +212,10 @@ TEST(Lexer, CommentError)
res.Error.Column == 3);
}
+TEST(Lexer, UnexpectedToken)
+{
+ auto res = Tokenize("a#4");
+ ASSERT_TRUE(!res.IsSuccessful &&
+ res.Error.Column == 1);
+}
+