From fc4e02756bf268fd9d410dbfe6f2910223afcbd1 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 11 Jun 2015 13:58:29 +0200 Subject: [PATCH 1/3] Changed const int flags to class private member in clang::TranslationUnit. --- src/TranslationUnit.cc | 8 +++----- src/TranslationUnit.h | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 1361912..e709375 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -1,16 +1,14 @@ #include "TranslationUnit.h" -const int TranslationUnitOptions = CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; - clang::TranslationUnit:: ~TranslationUnit() { // clang_disposeTranslationUnit(tu_); } - clang::TranslationUnit& clang::TranslationUnit:: operator=(const clang::TranslationUnit &tu) { tu_ = tu.tu_; + flags = tu.flags; return *this; } @@ -65,7 +63,7 @@ TranslationUnit(clang::Index *index, args.size(), files.data(), files.size(), - TranslationUnitOptions); + flags); } int clang::TranslationUnit:: @@ -82,5 +80,5 @@ ReparseTranslationUnit(const std::string &file_path, return clang_reparseTranslationUnit(tu_, files.size(), files.data(), - TranslationUnitOptions); + flags); } diff --git a/src/TranslationUnit.h b/src/TranslationUnit.h index 6e8e170..68b5c30 100644 --- a/src/TranslationUnit.h +++ b/src/TranslationUnit.h @@ -41,6 +41,7 @@ namespace clang { friend Cursor; friend CodeCompleteResults; CXTranslationUnit tu_; + unsigned flags=CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; }; } // namespace clang #endif // TRANSLATIONUNIT_H_ From 4cec716eacd8088de04c4633ce9cc6920024586f Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 13 Jun 2015 18:06:57 +0200 Subject: [PATCH 2/3] Removed some maybe-dangerous use of auto. Added DefaultFlags, and using this as default parameter to for instance ReparseTranslationUnit. --- src/CompileCommands.cc | 2 +- src/CompletionString.cc | 2 +- src/TranslationUnit.cc | 11 ++++++++--- src/TranslationUnit.h | 9 +++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/CompileCommands.cc b/src/CompileCommands.cc index af9b64d..42a7095 100644 --- a/src/CompileCommands.cc +++ b/src/CompileCommands.cc @@ -17,7 +17,7 @@ std::vector clang::CompileCommands:: get_commands() { unsigned N = clang_CompileCommands_getSize(commands_); std::vector res; - for (auto i = 0; i < N; i++) { + for (unsigned i = 0; i < N; i++) { res.emplace_back(clang::CompileCommand(i, this)); } return res; diff --git a/src/CompletionString.cc b/src/CompletionString.cc index a3c17eb..06bc9cb 100644 --- a/src/CompletionString.cc +++ b/src/CompletionString.cc @@ -17,7 +17,7 @@ std::vector clang::CompletionString:: get_chunks() { std::vector res; if (clang_getCompletionAvailability(str_) == CXAvailability_Available) { - for (auto i = 0; i < get_num_chunks(); i++) { + for (size_t i = 0; i < get_num_chunks(); i++) { res.emplace_back(clang_getCString(clang_getCompletionChunkText(str_, i)), static_cast (clang_getCompletionChunkKind(str_, i))); diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index e709375..57dfeb4 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -8,7 +8,6 @@ clang::TranslationUnit:: clang::TranslationUnit& clang::TranslationUnit:: operator=(const clang::TranslationUnit &tu) { tu_ = tu.tu_; - flags = tu.flags; return *this; } @@ -43,7 +42,8 @@ clang::TranslationUnit:: TranslationUnit(clang::Index *index, const std::string &filepath, const std::vector &command_line_args, - const std::map &buffers) { + const std::map &buffers, + unsigned flags) { std::vector files; for (auto &buffer : buffers) { CXUnsavedFile file; @@ -68,7 +68,8 @@ TranslationUnit(clang::Index *index, int clang::TranslationUnit:: ReparseTranslationUnit(const std::string &file_path, - const std::map &buffers) { + const std::map &buffers, + unsigned flags) { std::vector files; for (auto &buffer : buffers) { CXUnsavedFile file; @@ -82,3 +83,7 @@ ReparseTranslationUnit(const std::string &file_path, files.data(), flags); } + +unsigned clang::TranslationUnit::DefaultFlags() { + return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; +} diff --git a/src/TranslationUnit.h b/src/TranslationUnit.h index 68b5c30..e92c588 100644 --- a/src/TranslationUnit.h +++ b/src/TranslationUnit.h @@ -23,7 +23,8 @@ namespace clang { TranslationUnit(Index *index, const std::string &filepath, const std::vector &command_line_args, - const std::map &buffers); + const std::map &buffers, + unsigned flags=DefaultFlags()); TranslationUnit(Index *index, const std::string &filepath); ~TranslationUnit(); @@ -31,8 +32,9 @@ namespace clang { TranslationUnit& operator=(const TranslationUnit &tu); int ReparseTranslationUnit(const std::string &file_path, const std::map - &buffers); - + &buffers, + unsigned flags=DefaultFlags()); + static unsigned DefaultFlags(); private: friend Token; friend Tokens; @@ -41,7 +43,6 @@ namespace clang { friend Cursor; friend CodeCompleteResults; CXTranslationUnit tu_; - unsigned flags=CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; }; } // namespace clang #endif // TRANSLATIONUNIT_H_ From fbefd909852ae797a41939c8ceb035522549076f Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 14 Jun 2015 12:03:17 +0200 Subject: [PATCH 3/3] Removed default constructor since destroying an object using this would result in segmentation fault. No more crashes hopefully --- src/TranslationUnit.cc | 2 +- src/TranslationUnit.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 57dfeb4..a91fa6d 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -2,7 +2,7 @@ clang::TranslationUnit:: ~TranslationUnit() { - // clang_disposeTranslationUnit(tu_); + clang_disposeTranslationUnit(tu_); } clang::TranslationUnit& clang::TranslationUnit:: diff --git a/src/TranslationUnit.h b/src/TranslationUnit.h index e92c588..6cfa1a4 100644 --- a/src/TranslationUnit.h +++ b/src/TranslationUnit.h @@ -28,7 +28,6 @@ namespace clang { TranslationUnit(Index *index, const std::string &filepath); ~TranslationUnit(); - TranslationUnit() { } TranslationUnit& operator=(const TranslationUnit &tu); int ReparseTranslationUnit(const std::string &file_path, const std::map