Util: Properly detect empty Tokens and multiple root elements

This commit is contained in:
Riyyi
2022-07-11 19:08:30 +02:00
parent a3ab6aecfa
commit abb075939f
+37 -33
View File
@@ -36,40 +36,44 @@ Value Parser::parse()
{
Value result;
Token token;
while (m_index < m_tokens->size()) {
token = peek();
if (m_tokens->size() == 0) {
m_job->printErrorLine({}, "expecting token, not 'EOF'");
return result;
}
switch (token.type) {
case Token::Type::Literal:
result = getLiteral();
break;
case Token::Type::Number:
result = getNumber();
m_index++;
break;
case Token::Type::String:
result = getString();
break;
case Token::Type::BracketOpen:
result = getArray();
break;
case Token::Type::BraceOpen:
result = getObject();
break;
case Token::Type::BracketClose:
m_job->printErrorLine(token, "expecting value, not ']'");
m_index++;
break;
case Token::Type::BraceClose:
m_job->printErrorLine(token, "expecting string, not '}'");
m_index++;
break;
default:
m_job->printErrorLine(token, "multiple root elements");
m_index++;
break;
}
Token token = peek();
switch (token.type) {
case Token::Type::Literal:
result = getLiteral();
break;
case Token::Type::Number:
result = getNumber();
break;
case Token::Type::String:
result = getString();
break;
case Token::Type::BracketOpen:
result = getArray();
break;
case Token::Type::BraceOpen:
result = getObject();
break;
case Token::Type::BracketClose:
m_job->printErrorLine(token, "expecting value, not ']'");
m_index++;
break;
case Token::Type::BraceClose:
m_job->printErrorLine(token, "expecting string, not '}'");
m_index++;
break;
default:
m_job->printErrorLine(token, "multiple root elements");
m_index++;
break;
}
if (m_index < m_tokens->size()) {
m_job->printErrorLine(peek(), "multiple root elements");
}
return result;