From 8f6a7a1cca9f2e25c756498555213ec35d32b742 Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Thu, 8 Sep 2016 12:54:13 +0200 Subject: [PATCH] build: fixed to compile for mac and linux again * removed direct usage of MessageListener from lib parser --- src/lib/CMakeLists.txt | 2 + .../MessageInterruptTasksCounter.cpp | 40 +++++++++++++++++++ .../messaging/MessageInterruptTasksCounter.h | 23 +++++++++++ src/lib_parser/data/parser/cxx/ASTVisitor.cpp | 8 +--- src/lib_parser/data/parser/cxx/ASTVisitor.h | 8 +--- 5 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 src/lib/utility/messaging/MessageInterruptTasksCounter.cpp create mode 100644 src/lib/utility/messaging/MessageInterruptTasksCounter.h diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 88535f42..2ee2e244 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -298,6 +298,8 @@ add_files( utility/messaging/Message.h utility/messaging/MessageBase.h + utility/messaging/MessageInterruptTasksCounter.cpp + utility/messaging/MessageInterruptTasksCounter.h utility/messaging/MessageListener.h utility/messaging/MessageListenerBase.cpp utility/messaging/MessageListenerBase.h diff --git a/src/lib/utility/messaging/MessageInterruptTasksCounter.cpp b/src/lib/utility/messaging/MessageInterruptTasksCounter.cpp new file mode 100644 index 00000000..91ae294d --- /dev/null +++ b/src/lib/utility/messaging/MessageInterruptTasksCounter.cpp @@ -0,0 +1,40 @@ +#include "utility/messaging/MessageInterruptTasksCounter.h" + +#include "utility/messaging/type/MessageInterruptTasks.h" +#include "utility/messaging/MessageListener.h" + +MessageInterruptTasksCounter::MessageInterruptTasksCounter() + : m_count(0) +{ + class InterruptListener: public MessageListener + { + public: + InterruptListener(size_t& counter) + : m_counter(counter) + {} + + private: + virtual void handleMessage(MessageInterruptTasks* message) + { + m_counter++; + } + + size_t& m_counter; + }; + + m_listener = std::make_shared(m_count); +} + +MessageInterruptTasksCounter::~MessageInterruptTasksCounter() +{ +} + +void MessageInterruptTasksCounter::reset() +{ + m_count = 0; +} + +size_t MessageInterruptTasksCounter::getCount() const +{ + return m_count; +} diff --git a/src/lib/utility/messaging/MessageInterruptTasksCounter.h b/src/lib/utility/messaging/MessageInterruptTasksCounter.h new file mode 100644 index 00000000..4c1137f8 --- /dev/null +++ b/src/lib/utility/messaging/MessageInterruptTasksCounter.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_INTERRUPT_TASKS_COUNTER_H +#define MESSAGE_INTERRUPT_TASKS_COUNTER_H + +#include + +class MessageListenerBase; + +class MessageInterruptTasksCounter +{ +public: + MessageInterruptTasksCounter(); + virtual ~MessageInterruptTasksCounter(); + + void reset(); + size_t getCount() const; + +private: + std::shared_ptr m_listener; + + size_t m_count; +}; + +#endif // MESSAGE_INTERRUPT_TASKS_COUNTER_H diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp index cd17df55..a5429054 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp @@ -37,7 +37,6 @@ ASTVisitor::ASTVisitor(clang::ASTContext* context, clang::Preprocessor* preproce , m_childContext(0) , m_typeContext(RT_Reference) , m_contextAccess(ACCESS_NONE) - , m_continue(true) { m_declNameCache = std::make_shared([](const clang::NamedDecl* decl) -> NameHierarchy { @@ -912,7 +911,7 @@ bool ASTVisitor::VisitDecl(clang::Decl *d) } } - return m_continue; + return (m_interruptCounter.getCount() == 0); } //#include "data/parser/ParseFunction.h" @@ -1687,8 +1686,3 @@ NameHierarchy ASTVisitor::getContextName() const } return NameHierarchy("global"); } - -void ASTVisitor::handleMessage(MessageInterruptTasks* message) -{ - m_continue = false; -} diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.h b/src/lib_parser/data/parser/cxx/ASTVisitor.h index a093b28d..43714c17 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.h +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.h @@ -11,13 +11,11 @@ #include "data/parser/ParserClient.h" #include "data/parser/SymbolKind.h" #include "utility/file/FileRegister.h" +#include "utility/messaging/MessageInterruptTasksCounter.h" #include "utility/Cache.h" -#include "utility/messaging/type/MessageInterruptTasks.h" -#include "utility/messaging/MessageListener.h" class ASTVisitor : clang::RecursiveASTVisitor - , MessageListener { public: typedef Cache DeclNameCache; @@ -228,8 +226,6 @@ private: NameHierarchy getContextName() const; - virtual void handleMessage(MessageInterruptTasks* message); - struct FileIdHash { size_t operator()(clang::FileID fileID) const { return fileID.getHashValue(); @@ -246,7 +242,7 @@ private: std::shared_ptr m_typeNameCache; AccessKind m_contextAccess; - bool m_continue; + MessageInterruptTasksCounter m_interruptCounter; }; #endif // AST_VISITOR_H