summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibCpp/Parser.cpp6
-rw-r--r--Userland/Libraries/LibCpp/Parser.h4
2 files changed, 7 insertions, 3 deletions
diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp
index 22f4ce4fed..3155d20b31 100644
--- a/Userland/Libraries/LibCpp/Parser.cpp
+++ b/Userland/Libraries/LibCpp/Parser.cpp
@@ -894,6 +894,10 @@ Vector<Token> Parser::tokens_in_range(Position start, Position end) const
void Parser::error(StringView message)
{
LOG_SCOPE();
+
+ if (!m_saved_states.is_empty())
+ return;
+
if (message.is_null() || message.is_empty())
message = "<empty>";
String formatted_message;
@@ -907,7 +911,7 @@ void Parser::error(StringView message)
m_tokens[m_state.token_index].start().column);
}
- m_state.errors.append(formatted_message);
+ m_errors.append(formatted_message);
}
bool Parser::match_expression()
diff --git a/Userland/Libraries/LibCpp/Parser.h b/Userland/Libraries/LibCpp/Parser.h
index 665d8f71ee..b2a5721db5 100644
--- a/Userland/Libraries/LibCpp/Parser.h
+++ b/Userland/Libraries/LibCpp/Parser.h
@@ -33,7 +33,7 @@ public:
String text_of_node(const ASTNode&) const;
StringView text_of_token(const Cpp::Token& token) const;
void print_tokens() const;
- const Vector<String>& errors() const { return m_state.errors; }
+ const Vector<String>& errors() const { return m_errors; }
const Preprocessor::Definitions& preprocessor_definitions() const { return m_preprocessor_definitions; }
struct TodoEntry {
@@ -147,7 +147,6 @@ private:
struct State {
size_t token_index { 0 };
- Vector<String> errors;
NonnullRefPtrVector<ASTNode> nodes;
};
@@ -200,6 +199,7 @@ private:
State m_state;
Vector<State> m_saved_states;
RefPtr<TranslationUnit> m_root_node;
+ Vector<String> m_errors;
Vector<TokenAndPreprocessorDefinition> m_replaced_preprocessor_tokens;
};