1 //===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines CIndexer, a subclass of Indexer that provides extra 11 // functionality needed by the CIndex library. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_CINDEXER_H 16 #define LLVM_CLANG_CINDEXER_H 17 18 #include "clang-c/Index.h" 19 #include "llvm/ADT/StringRef.h" 20 #include "llvm/Support/Path.h" 21 #include <vector> 22 23 namespace llvm { 24 class CrashRecoveryContext; 25 } 26 27 namespace clang { 28 class ASTUnit; 29 30 class CIndexer { 31 bool OnlyLocalDecls; 32 bool DisplayDiagnostics; 33 unsigned Options; // CXGlobalOptFlags. 34 35 llvm::sys::Path ResourcesPath; 36 std::string WorkingDir; 37 38 public: CIndexer()39 CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), 40 Options(CXGlobalOpt_None) { } 41 42 /// \brief Whether we only want to see "local" declarations (that did not 43 /// come from a previous precompiled header). If false, we want to see all 44 /// declarations. getOnlyLocalDecls()45 bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 46 void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 47 getDisplayDiagnostics()48 bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 49 void setDisplayDiagnostics(bool Display = true) { 50 DisplayDiagnostics = Display; 51 } 52 getCXGlobalOptFlags()53 unsigned getCXGlobalOptFlags() const { return Options; } setCXGlobalOptFlags(unsigned options)54 void setCXGlobalOptFlags(unsigned options) { Options = options; } 55 isOptEnabled(CXGlobalOptFlags opt)56 bool isOptEnabled(CXGlobalOptFlags opt) const { 57 return Options & opt; 58 } 59 60 /// \brief Get the path of the clang resource files. 61 std::string getClangResourcesPath(); 62 getWorkingDirectory()63 const std::string &getWorkingDirectory() const { return WorkingDir; } setWorkingDirectory(const std::string & Dir)64 void setWorkingDirectory(const std::string &Dir) { WorkingDir = Dir; } 65 }; 66 67 /** 68 * \brief Given a set of "unsaved" files, create temporary files and 69 * construct the clang -cc1 argument list needed to perform the remapping. 70 * 71 * \returns true if an error occurred. 72 */ 73 bool RemapFiles(unsigned num_unsaved_files, 74 struct CXUnsavedFile *unsaved_files, 75 std::vector<std::string> &RemapArgs, 76 std::vector<llvm::sys::Path> &TemporaryFiles); 77 78 /// \brief Return the current size to request for "safety". 79 unsigned GetSafetyThreadStackSize(); 80 81 /// \brief Set the current size to request for "safety" (or 0, if safety 82 /// threads should not be used). 83 void SetSafetyThreadStackSize(unsigned Value); 84 85 /// \brief Execution the given code "safely", using crash recovery or safety 86 /// threads when possible. 87 /// 88 /// \return False if a crash was detected. 89 bool RunSafely(llvm::CrashRecoveryContext &CRC, 90 void (*Fn)(void*), void *UserData, unsigned Size = 0); 91 92 /// \brief Set the thread priority to background. 93 /// FIXME: Move to llvm/Support. 94 void setThreadBackgroundPriority(); 95 96 /// \brief Print libclang's resource usage to standard error. 97 void PrintLibclangResourceUsage(CXTranslationUnit TU); 98 99 namespace cxindex { 100 void printDiagsToStderr(ASTUnit *Unit); 101 } 102 } 103 104 #endif 105