Daniel Dunbar | bf44c3b | 2010-11-05 07:19:31 +0000 | [diff] [blame] | 1 | //===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===// |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 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 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame^] | 15 | #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CINDEXER_H |
| 16 | #define LLVM_CLANG_TOOLS_LIBCLANG_CINDEXER_H |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 17 | |
| 18 | #include "clang-c/Index.h" |
Douglas Gregor | fc8ea23 | 2010-01-26 17:06:03 +0000 | [diff] [blame] | 19 | #include "llvm/ADT/StringRef.h" |
Michael J. Spencer | 03013fa | 2010-11-29 18:12:39 +0000 | [diff] [blame] | 20 | #include "llvm/Support/Path.h" |
Douglas Gregor | 4db64a4 | 2010-01-23 00:14:00 +0000 | [diff] [blame] | 21 | #include <vector> |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 22 | |
Daniel Dunbar | bf44c3b | 2010-11-05 07:19:31 +0000 | [diff] [blame] | 23 | namespace llvm { |
| 24 | class CrashRecoveryContext; |
| 25 | } |
| 26 | |
Argyrios Kyrtzidis | bbca564 | 2012-03-28 02:18:02 +0000 | [diff] [blame] | 27 | namespace clang { |
Argyrios Kyrtzidis | e722ed6 | 2012-04-11 02:11:16 +0000 | [diff] [blame] | 28 | class ASTUnit; |
Argyrios Kyrtzidis | 664b06f | 2013-01-07 19:16:25 +0000 | [diff] [blame] | 29 | class MacroInfo; |
| 30 | class MacroDefinition; |
| 31 | class SourceLocation; |
| 32 | class Token; |
| 33 | class IdentifierInfo; |
Argyrios Kyrtzidis | bbca564 | 2012-03-28 02:18:02 +0000 | [diff] [blame] | 34 | |
Douglas Gregor | a030b7c | 2010-01-22 20:35:53 +0000 | [diff] [blame] | 35 | class CIndexer { |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 36 | bool OnlyLocalDecls; |
Douglas Gregor | 0a812cf | 2010-02-18 23:07:20 +0000 | [diff] [blame] | 37 | bool DisplayDiagnostics; |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 38 | unsigned Options; // CXGlobalOptFlags. |
Douglas Gregor | 0a812cf | 2010-02-18 23:07:20 +0000 | [diff] [blame] | 39 | |
Benjamin Kramer | 082ad2b | 2013-06-13 13:56:37 +0000 | [diff] [blame] | 40 | std::string ResourcesPath; |
Argyrios Kyrtzidis | 389db16 | 2010-11-03 22:45:23 +0000 | [diff] [blame] | 41 | |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 42 | public: |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 43 | CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), |
| 44 | Options(CXGlobalOpt_None) { } |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 45 | |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 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 | |
Douglas Gregor | 0a812cf | 2010-02-18 23:07:20 +0000 | [diff] [blame] | 52 | bool getDisplayDiagnostics() const { return DisplayDiagnostics; } |
| 53 | void setDisplayDiagnostics(bool Display = true) { |
| 54 | DisplayDiagnostics = Display; |
| 55 | } |
| 56 | |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 57 | unsigned getCXGlobalOptFlags() const { return Options; } |
| 58 | void setCXGlobalOptFlags(unsigned options) { Options = options; } |
| 59 | |
| 60 | bool isOptEnabled(CXGlobalOptFlags opt) const { |
Argyrios Kyrtzidis | f962eb4 | 2012-03-28 20:42:59 +0000 | [diff] [blame] | 61 | return Options & opt; |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 62 | } |
| 63 | |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 64 | /// \brief Get the path of the clang resource files. |
Benjamin Kramer | 082ad2b | 2013-06-13 13:56:37 +0000 | [diff] [blame] | 65 | const std::string &getClangResourcesPath(); |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 66 | }; |
| 67 | |
Daniel Dunbar | bf44c3b | 2010-11-05 07:19:31 +0000 | [diff] [blame] | 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, |
Ted Kremenek | 6c53fdd | 2010-11-14 17:47:35 +0000 | [diff] [blame] | 80 | void (*Fn)(void*), void *UserData, unsigned Size = 0); |
Douglas Gregor | 6df7873 | 2011-05-05 20:27:22 +0000 | [diff] [blame] | 81 | |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 82 | /// \brief Set the thread priority to background. |
| 83 | /// FIXME: Move to llvm/Support. |
Argyrios Kyrtzidis | 81b5ac3 | 2012-03-28 02:49:54 +0000 | [diff] [blame] | 84 | void setThreadBackgroundPriority(); |
Argyrios Kyrtzidis | fdc1795 | 2012-03-28 02:18:05 +0000 | [diff] [blame] | 85 | |
Douglas Gregor | 6df7873 | 2011-05-05 20:27:22 +0000 | [diff] [blame] | 86 | /// \brief Print libclang's resource usage to standard error. |
| 87 | void PrintLibclangResourceUsage(CXTranslationUnit TU); |
Argyrios Kyrtzidis | e722ed6 | 2012-04-11 02:11:16 +0000 | [diff] [blame] | 88 | |
| 89 | namespace cxindex { |
| 90 | void printDiagsToStderr(ASTUnit *Unit); |
Argyrios Kyrtzidis | 664b06f | 2013-01-07 19:16:25 +0000 | [diff] [blame] | 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. |
Dmitri Gribenko | 67812b2 | 2013-01-11 21:01:49 +0000 | [diff] [blame] | 99 | const MacroInfo *getMacroInfo(const MacroDefinition *MacroDef, |
| 100 | CXTranslationUnit TU); |
Argyrios Kyrtzidis | 664b06f | 2013-01-07 19:16:25 +0000 | [diff] [blame] | 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); |
Argyrios Kyrtzidis | e722ed6 | 2012-04-11 02:11:16 +0000 | [diff] [blame] | 115 | } |
Douglas Gregor | 4db64a4 | 2010-01-23 00:14:00 +0000 | [diff] [blame] | 116 | } |
| 117 | |
Ted Kremenek | ab18893 | 2010-01-05 19:32:54 +0000 | [diff] [blame] | 118 | #endif |