CIndexer.h revision fdc1795acc9d5d73a767cc7d43ad1546e93adbba
1bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar//===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===// 2ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 3ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// The LLVM Compiler Infrastructure 4ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 5ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// This file is distributed under the University of Illinois Open Source 6ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// License. See LICENSE.TXT for details. 7ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 8ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek//===----------------------------------------------------------------------===// 9ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 10ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// This file defines CIndexer, a subclass of Indexer that provides extra 11ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// functionality needed by the CIndex library. 12ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 13ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek//===----------------------------------------------------------------------===// 14ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 15ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#ifndef LLVM_CLANG_CINDEXER_H 16ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#define LLVM_CLANG_CINDEXER_H 17ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 18ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#include "clang-c/Index.h" 19fc8ea23eb6cbaaa5046f2abb4c033e24c8659efdDouglas Gregor#include "llvm/ADT/StringRef.h" 2003013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer#include "llvm/Support/Path.h" 214db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor#include <vector> 22ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 23bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbarnamespace llvm { 24bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar class CrashRecoveryContext; 25bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar} 26bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar 27bbca564eec4eb841848a40014f7ddc9e5807125eArgyrios Kyrtzidisnamespace clang { 28bbca564eec4eb841848a40014f7ddc9e5807125eArgyrios Kyrtzidis 29a030b7cf5e6aad5889b1b662b6979840bc75f87fDouglas Gregorclass CIndexer { 30ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek bool OnlyLocalDecls; 310a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor bool DisplayDiagnostics; 32fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis unsigned Options; // CXGlobalOptFlags. 330a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor 34d1e6fdb4c5325c61fedfa62751f70ee373880a52Douglas Gregor llvm::sys::Path ResourcesPath; 35389db16c63eec6ecfa9b235155252d8da766e94eArgyrios Kyrtzidis std::string WorkingDir; 36389db16c63eec6ecfa9b235155252d8da766e94eArgyrios Kyrtzidis 37ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenekpublic: 38fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), 39fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis Options(CXGlobalOpt_None) { } 40ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 41ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// \brief Whether we only want to see "local" declarations (that did not 42ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// come from a previous precompiled header). If false, we want to see all 43ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// declarations. 44ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 45ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 46ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 470a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 480a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor void setDisplayDiagnostics(bool Display = true) { 490a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor DisplayDiagnostics = Display; 500a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor } 510a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor 52fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis unsigned getCXGlobalOptFlags() const { return Options; } 53fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis void setCXGlobalOptFlags(unsigned options) { Options = options; } 54fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis 55fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis bool isOptEnabled(CXGlobalOptFlags opt) const { 56fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis return Options & ~unsigned(opt); 57fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis } 58fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis 59ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// \brief Get the path of the clang resource files. 60ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek std::string getClangResourcesPath(); 61389db16c63eec6ecfa9b235155252d8da766e94eArgyrios Kyrtzidis 62389db16c63eec6ecfa9b235155252d8da766e94eArgyrios Kyrtzidis const std::string &getWorkingDirectory() const { return WorkingDir; } 63389db16c63eec6ecfa9b235155252d8da766e94eArgyrios Kyrtzidis void setWorkingDirectory(const std::string &Dir) { WorkingDir = Dir; } 64ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek}; 65ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 664db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor /** 674db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * \brief Given a set of "unsaved" files, create temporary files and 684db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * construct the clang -cc1 argument list needed to perform the remapping. 694db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * 704db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * \returns true if an error occurred. 714db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor */ 724db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor bool RemapFiles(unsigned num_unsaved_files, 734db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor struct CXUnsavedFile *unsaved_files, 744db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor std::vector<std::string> &RemapArgs, 754db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor std::vector<llvm::sys::Path> &TemporaryFiles); 76bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar 77bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// \brief Return the current size to request for "safety". 78bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar unsigned GetSafetyThreadStackSize(); 79bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar 80bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// \brief Set the current size to request for "safety" (or 0, if safety 81bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// threads should not be used). 82bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar void SetSafetyThreadStackSize(unsigned Value); 83bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar 84bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// \brief Execution the given code "safely", using crash recovery or safety 85bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// threads when possible. 86bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// 87bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar /// \return False if a crash was detected. 88bf44c3b099602c9c967f1b20995919fb4ef39a51Daniel Dunbar bool RunSafely(llvm::CrashRecoveryContext &CRC, 896c53fdd88f0d75875365463822fa817d7b1a9573Ted Kremenek void (*Fn)(void*), void *UserData, unsigned Size = 0); 906df78739f3b3f672f9735445741cbcfa7c10fb1fDouglas Gregor 91fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis /// \brief Set the thread priority to background. 92fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis /// FIXME: Move to llvm/Support. 93fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis void setBackGroundPriority(); 94fdc1795acc9d5d73a767cc7d43ad1546e93adbbaArgyrios Kyrtzidis 956df78739f3b3f672f9735445741cbcfa7c10fb1fDouglas Gregor /// \brief Print libclang's resource usage to standard error. 966df78739f3b3f672f9735445741cbcfa7c10fb1fDouglas Gregor void PrintLibclangResourceUsage(CXTranslationUnit TU); 974db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor} 984db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor 99ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#endif 100