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 class MacroInfo; 30 class MacroDefinition; 31 class SourceLocation; 32 class Token; 33 class IdentifierInfo; 34 35 class CIndexer { 36 bool OnlyLocalDecls; 37 bool DisplayDiagnostics; 38 unsigned Options; // CXGlobalOptFlags. 39 40 std::string ResourcesPath; 41 42 public: 43 CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), 44 Options(CXGlobalOpt_None) { } 45 46 /// \brief Whether we only want to see "local" declarations (that did not 47 /// come from a previous precompiled header). If false, we want to see all 48 /// declarations. 49 bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 50 void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 51 52 bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 53 void setDisplayDiagnostics(bool Display = true) { 54 DisplayDiagnostics = Display; 55 } 56 57 unsigned getCXGlobalOptFlags() const { return Options; } 58 void setCXGlobalOptFlags(unsigned options) { Options = options; } 59 60 bool isOptEnabled(CXGlobalOptFlags opt) const { 61 return Options & opt; 62 } 63 64 /// \brief Get the path of the clang resource files. 65 const std::string &getClangResourcesPath(); 66 }; 67 68 /// \brief Return the current size to request for "safety". 69 unsigned GetSafetyThreadStackSize(); 70 71 /// \brief Set the current size to request for "safety" (or 0, if safety 72 /// threads should not be used). 73 void SetSafetyThreadStackSize(unsigned Value); 74 75 /// \brief Execution the given code "safely", using crash recovery or safety 76 /// threads when possible. 77 /// 78 /// \return False if a crash was detected. 79 bool RunSafely(llvm::CrashRecoveryContext &CRC, 80 void (*Fn)(void*), void *UserData, unsigned Size = 0); 81 82 /// \brief Set the thread priority to background. 83 /// FIXME: Move to llvm/Support. 84 void setThreadBackgroundPriority(); 85 86 /// \brief Print libclang's resource usage to standard error. 87 void PrintLibclangResourceUsage(CXTranslationUnit TU); 88 89 namespace cxindex { 90 void printDiagsToStderr(ASTUnit *Unit); 91 92 /// \brief If \c MacroDefLoc points at a macro definition with \c II as 93 /// its name, this retrieves its MacroInfo. 94 MacroInfo *getMacroInfo(const IdentifierInfo &II, 95 SourceLocation MacroDefLoc, 96 CXTranslationUnit TU); 97 98 /// \brief Retrieves the corresponding MacroInfo of a MacroDefinition. 99 const MacroInfo *getMacroInfo(const MacroDefinition *MacroDef, 100 CXTranslationUnit TU); 101 102 /// \brief If \c Loc resides inside the definition of \c MI and it points at 103 /// an identifier that has ever been a macro name, this returns the latest 104 /// MacroDefinition for that name, otherwise it returns NULL. 105 MacroDefinition *checkForMacroInMacroDefinition(const MacroInfo *MI, 106 SourceLocation Loc, 107 CXTranslationUnit TU); 108 109 /// \brief If \c Tok resides inside the definition of \c MI and it points at 110 /// an identifier that has ever been a macro name, this returns the latest 111 /// MacroDefinition for that name, otherwise it returns NULL. 112 MacroDefinition *checkForMacroInMacroDefinition(const MacroInfo *MI, 113 const Token &Tok, 114 CXTranslationUnit TU); 115 } 116 } 117 118 #endif 119