CIndexer.h revision e722ed6f5464232e23be52f4976312ef526fae99
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file defines CIndexer, a subclass of Indexer that provides extra 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// functionality needed by the CIndex library. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#ifndef LLVM_CLANG_CINDEXER_H 16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define LLVM_CLANG_CINDEXER_H 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "clang-c/Index.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "llvm/ADT/StringRef.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "llvm/Support/Path.h" 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <vector> 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace llvm { 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch class CrashRecoveryContext; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace clang { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ASTUnit; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass CIndexer { 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool OnlyLocalDecls; 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool DisplayDiagnostics; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned Options; // CXGlobalOptFlags. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) llvm::sys::Path ResourcesPath; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string WorkingDir; 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Options(CXGlobalOpt_None) { } 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Whether we only want to see "local" declarations (that did not 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch /// come from a previous precompiled header). If false, we want to see all 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// declarations. 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setDisplayDiagnostics(bool Display = true) { 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DisplayDiagnostics = Display; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unsigned getCXGlobalOptFlags() const { return Options; } 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void setCXGlobalOptFlags(unsigned options) { Options = options; } 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool isOptEnabled(CXGlobalOptFlags opt) const { 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return Options & opt; 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Get the path of the clang resource files. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string getClangResourcesPath(); 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string &getWorkingDirectory() const { return WorkingDir; } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setWorkingDirectory(const std::string &Dir) { WorkingDir = Dir; } 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) /** 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * \brief Given a set of "unsaved" files, create temporary files and 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * construct the clang -cc1 argument list needed to perform the remapping. 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch * 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * \returns true if an error occurred. 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RemapFiles(unsigned num_unsaved_files, 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch struct CXUnsavedFile *unsaved_files, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> &RemapArgs, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<llvm::sys::Path> &TemporaryFiles); 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Return the current size to request for "safety". 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unsigned GetSafetyThreadStackSize(); 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) /// \brief Set the current size to request for "safety" (or 0, if safety 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch /// threads should not be used). 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetSafetyThreadStackSize(unsigned Value); 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /// \brief Execution the given code "safely", using crash recovery or safety 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /// threads when possible. 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /// 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /// \return False if a crash was detected. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RunSafely(llvm::CrashRecoveryContext &CRC, 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void (*Fn)(void*), void *UserData, unsigned Size = 0); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) /// \brief Set the thread priority to background. 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /// FIXME: Move to llvm/Support. 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void setThreadBackgroundPriority(); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch /// \brief Print libclang's resource usage to standard error. 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void PrintLibclangResourceUsage(CXTranslationUnit TU); 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) namespace cxindex { 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void printDiagsToStderr(ASTUnit *Unit); 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)