LibJS: Let parser keep track of errors

Rather than printing them to stderr directly the parser now keeps a
Vector<Error>, which allows the "owner" of the parser to consume them
individually after parsing.

The Error struct has a message, line number, column number and a
to_string() helper function to format this information into a meaningful
error message.

The Function() constructor will now include an error message when
throwing a SyntaxError.
This commit is contained in:
Linus Groh 2020-05-14 16:26:01 +01:00 committed by Andreas Kling
parent 00b61a212f
commit 33defef267
Notes: sideshowbarker 2024-07-19 06:38:47 +09:00
7 changed files with 39 additions and 12 deletions

View file

@ -29,7 +29,6 @@
#include <AK/HashMap.h>
#include <AK/ScopeGuard.h>
#include <AK/StdLibExtras.h>
#include <stdio.h>
namespace JS {
@ -1385,12 +1384,11 @@ void Parser::expected(const char* what)
void Parser::syntax_error(const String& message, size_t line, size_t column)
{
m_parser_state.m_has_errors = true;
if (line == 0 || column == 0) {
line = m_parser_state.m_current_token.line_number();
column = m_parser_state.m_current_token.line_column();
}
fprintf(stderr, "Syntax Error: %s (line: %zu, column: %zu)\n", message.characters(), line, column);
m_parser_state.m_errors.append({ message, line, column });
}
void Parser::save_state()