Util: Check strings for double quotes in Lexer

This commit is contained in:
Riyyi
2022-06-28 16:03:43 +02:00
parent 8fb1a1a8e9
commit 061ed74d4f
2 changed files with 19 additions and 3 deletions
+4
View File
@@ -33,6 +33,10 @@ Value Job::fire()
Lexer lexer(this);
lexer.analyze();
if (!m_success) {
return { nullptr };
}
Parser parser(this);
Value value = parser.parse();
+15 -3
View File
@@ -59,8 +59,6 @@ void Lexer::analyze()
break;
case '"':
if (!getString()) {
// Error!
printf("Invalid JSON!\n");
return;
}
break;
@@ -150,8 +148,17 @@ bool Lexer::consumeSpecific(char character)
bool Lexer::getString()
{
size_t column = m_column;
std::string symbol = "";
auto isValidStringCharacter = [](char check) -> bool {
std::string invalidCharacters = "{}[]:,";
if (invalidCharacters.find(check) != std::string::npos) {
return false;
}
return true;
};
std::string symbol = "";
char character = consume();
for (;;) {
character = peek();
@@ -159,6 +166,11 @@ bool Lexer::getString()
// TODO: Escape logic goes here
// ", \, /, b(ackspace), f(orm feed), l(ine feed), c(arriage return), t(ab), u(nicode) \u0021
if (!isValidStringCharacter(character)) {
m_tokens->push_back({ Token::Type::None, m_line, column, "" });
m_job->printErrorLine(m_job->tokens()->back(), "strings should be wrapped in double quotes");
return false;
}
if (character == '"') {
break;
}