diff options
author | Andreas Kling <kling@serenityos.org> | 2022-11-23 12:39:23 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-11-23 16:05:59 +0000 |
commit | e6331031c4cab0c29dfe6b4ae52940100eb11ff2 (patch) | |
tree | 2a98e599b05bfb5bbc987f3d98cd39801c4a2421 /Userland/Libraries/LibJS/Parser.h | |
parent | e0916dbb359d6181290daf1748fe5dce85015be1 (diff) | |
download | serenity-e6331031c4cab0c29dfe6b4ae52940100eb11ff2.zip |
LibJS: Make Parser::Error a standalone ParserError class
This allows us to forward declare it and reduce the number of things
that need to include Parser.h.
Diffstat (limited to 'Userland/Libraries/LibJS/Parser.h')
-rw-r--r-- | Userland/Libraries/LibJS/Parser.h | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/Userland/Libraries/LibJS/Parser.h b/Userland/Libraries/LibJS/Parser.h index 9d00032463..43cb378d8e 100644 --- a/Userland/Libraries/LibJS/Parser.h +++ b/Userland/Libraries/LibJS/Parser.h @@ -13,6 +13,7 @@ #include <AK/StringBuilder.h> #include <LibJS/AST.h> #include <LibJS/Lexer.h> +#include <LibJS/ParserError.h> #include <LibJS/Runtime/FunctionConstructor.h> #include <LibJS/SourceRange.h> #include <LibJS/Token.h> @@ -173,36 +174,8 @@ public: Vector<CallExpression::Argument> parse_arguments(); - struct Error { - String message; - Optional<Position> position; - - String to_string() const - { - if (!position.has_value()) - return message; - return String::formatted("{} (line: {}, column: {})", message, position.value().line, position.value().column); - } - - String source_location_hint(StringView source, char const spacer = ' ', char const indicator = '^') const - { - if (!position.has_value()) - return {}; - // We need to modify the source to match what the lexer considers one line - normalizing - // line terminators to \n is easier than splitting using all different LT characters. - String source_string = source.replace("\r\n"sv, "\n"sv, ReplaceMode::All).replace("\r"sv, "\n"sv, ReplaceMode::All).replace(LINE_SEPARATOR_STRING, "\n"sv, ReplaceMode::All).replace(PARAGRAPH_SEPARATOR_STRING, "\n"sv, ReplaceMode::All); - StringBuilder builder; - builder.append(source_string.split_view('\n', SplitBehavior::KeepEmpty)[position.value().line - 1]); - builder.append('\n'); - for (size_t i = 0; i < position.value().column - 1; ++i) - builder.append(spacer); - builder.append(indicator); - return builder.build(); - } - }; - bool has_errors() const { return m_state.errors.size(); } - Vector<Error> const& errors() const { return m_state.errors; } + Vector<ParserError> const& errors() const { return m_state.errors; } void print_errors(bool print_hint = true) const { for (auto& error : m_state.errors) { @@ -305,7 +278,7 @@ private: struct ParserState { Lexer lexer; Token current_token; - Vector<Error> errors; + Vector<ParserError> errors; ScopePusher* current_scope_pusher { nullptr }; HashMap<StringView, Optional<Position>> labels_in_scope; |