17df92ae9STed Kremenek //===- CXTranslationUnit.h - Routines for manipulating CXTranslationUnits -===// 27df92ae9STed Kremenek // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67df92ae9STed Kremenek // 77df92ae9STed Kremenek //===----------------------------------------------------------------------===// 87df92ae9STed Kremenek // 97df92ae9STed Kremenek // This file defines routines for manipulating CXTranslationUnits. 107df92ae9STed Kremenek // 117df92ae9STed Kremenek //===----------------------------------------------------------------------===// 127df92ae9STed Kremenek 132f5db8b3SBenjamin Kramer #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H 142f5db8b3SBenjamin Kramer #define LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H 157df92ae9STed Kremenek 16256454fdSDmitri Gribenko #include "CLog.h" 17757fcd6dSChandler Carruth #include "CXString.h" 185553d0d4SChandler Carruth #include "clang-c/Index.h" 19c22ea1ceSDmitri Gribenko 20d36209e3SDmitri Gribenko namespace clang { 21d36209e3SDmitri Gribenko class ASTUnit; 22d36209e3SDmitri Gribenko class CIndexer; 239e605113SDmitri Gribenko namespace index { 249e605113SDmitri Gribenko class CommentToXMLConverter; 259e605113SDmitri Gribenko } // namespace index 26d36209e3SDmitri Gribenko } // namespace clang 27d36209e3SDmitri Gribenko 287df92ae9STed Kremenek struct CXTranslationUnitImpl { 29183436e5SDmitri Gribenko clang::CIndexer *CIdx; 30d36209e3SDmitri Gribenko clang::ASTUnit *TheASTUnit; 31b95b3f12SDmitri Gribenko clang::cxstring::CXStringPool *StringPool; 32d010ba47STed Kremenek void *Diagnostics; 33d77f6219STed Kremenek void *OverridenCursorsPool; 349e605113SDmitri Gribenko clang::index::CommentToXMLConverter *CommentToXML; 35690f0e2fSAlex Lorenz unsigned ParsingOptions; 36690f0e2fSAlex Lorenz std::vector<std::string> Arguments; 377df92ae9STed Kremenek }; 387df92ae9STed Kremenek 39485ad425SEmilio Cobos Alvarez struct CXTargetInfoImpl { 40485ad425SEmilio Cobos Alvarez CXTranslationUnit TranslationUnit; 41485ad425SEmilio Cobos Alvarez }; 42485ad425SEmilio Cobos Alvarez 43769c7bcdSArgyrios Kyrtzidis namespace clang { 44769c7bcdSArgyrios Kyrtzidis namespace cxtu { 45769c7bcdSArgyrios Kyrtzidis 46ea4395ebSDavid Blaikie CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, 47ea4395ebSDavid Blaikie std::unique_ptr<ASTUnit> AU); 48769c7bcdSArgyrios Kyrtzidis getASTUnit(CXTranslationUnit TU)49c22ea1ceSDmitri Gribenkostatic inline ASTUnit *getASTUnit(CXTranslationUnit TU) { 502bee6665SArgyrios Kyrtzidis if (!TU) 5169186e73SCraig Topper return nullptr; 52d36209e3SDmitri Gribenko return TU->TheASTUnit; 53c22ea1ceSDmitri Gribenko } 54c22ea1ceSDmitri Gribenko 55ea4d1c32SDmitri Gribenko /// \returns true if the ASTUnit has a diagnostic about the AST file being 56ea4d1c32SDmitri Gribenko /// corrupted. 57ea4d1c32SDmitri Gribenko bool isASTReadError(ASTUnit *AU); 58ea4d1c32SDmitri Gribenko isNotUsableTU(CXTranslationUnit TU)59852d622eSDmitri Gribenkostatic inline bool isNotUsableTU(CXTranslationUnit TU) { 60256454fdSDmitri Gribenko return !TU; 61256454fdSDmitri Gribenko } 62256454fdSDmitri Gribenko 63256454fdSDmitri Gribenko #define LOG_BAD_TU(TU) \ 64256454fdSDmitri Gribenko do { \ 65256454fdSDmitri Gribenko LOG_FUNC_SECTION { \ 66256454fdSDmitri Gribenko *Log << "called with a bad TU: " << TU; \ 67256454fdSDmitri Gribenko } \ 68256454fdSDmitri Gribenko } while(false) 69256454fdSDmitri Gribenko 70dc199a31SArgyrios Kyrtzidis class CXTUOwner { 71dc199a31SArgyrios Kyrtzidis CXTranslationUnitImpl *TU; 72dc199a31SArgyrios Kyrtzidis 73dc199a31SArgyrios Kyrtzidis public: CXTUOwner(CXTranslationUnitImpl * tu)74dc199a31SArgyrios Kyrtzidis CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { } 75dc199a31SArgyrios Kyrtzidis ~CXTUOwner(); 76dc199a31SArgyrios Kyrtzidis getTU()77dc199a31SArgyrios Kyrtzidis CXTranslationUnitImpl *getTU() const { return TU; } 78dc199a31SArgyrios Kyrtzidis takeTU()79dc199a31SArgyrios Kyrtzidis CXTranslationUnitImpl *takeTU() { 80dc199a31SArgyrios Kyrtzidis CXTranslationUnitImpl *retTU = TU; 8169186e73SCraig Topper TU = nullptr; 82dc199a31SArgyrios Kyrtzidis return retTU; 83dc199a31SArgyrios Kyrtzidis } 84dc199a31SArgyrios Kyrtzidis }; 85dc199a31SArgyrios Kyrtzidis 86dc199a31SArgyrios Kyrtzidis 87ab9db510SAlexander Kornienko }} // end namespace clang::cxtu 88769c7bcdSArgyrios Kyrtzidis 897df92ae9STed Kremenek #endif 90