1 //===- CXTranslationUnit.h - Routines for manipulating CXTranslationUnits -===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines routines for manipulating CXTranslationUnits. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H 14 #define LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H 15 16 #include "CLog.h" 17 #include "CXString.h" 18 #include "clang-c/Index.h" 19 20 namespace clang { 21 class ASTUnit; 22 class CIndexer; 23 namespace index { 24 class CommentToXMLConverter; 25 } // namespace index 26 } // namespace clang 27 28 struct CXTranslationUnitImpl { 29 clang::CIndexer *CIdx; 30 clang::ASTUnit *TheASTUnit; 31 clang::cxstring::CXStringPool *StringPool; 32 void *Diagnostics; 33 void *OverridenCursorsPool; 34 clang::index::CommentToXMLConverter *CommentToXML; 35 unsigned ParsingOptions; 36 std::vector<std::string> Arguments; 37 }; 38 39 struct CXTargetInfoImpl { 40 CXTranslationUnit TranslationUnit; 41 }; 42 43 namespace clang { 44 namespace cxtu { 45 46 CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, 47 std::unique_ptr<ASTUnit> AU); 48 getASTUnit(CXTranslationUnit TU)49static inline ASTUnit *getASTUnit(CXTranslationUnit TU) { 50 if (!TU) 51 return nullptr; 52 return TU->TheASTUnit; 53 } 54 55 /// \returns true if the ASTUnit has a diagnostic about the AST file being 56 /// corrupted. 57 bool isASTReadError(ASTUnit *AU); 58 isNotUsableTU(CXTranslationUnit TU)59static inline bool isNotUsableTU(CXTranslationUnit TU) { 60 return !TU; 61 } 62 63 #define LOG_BAD_TU(TU) \ 64 do { \ 65 LOG_FUNC_SECTION { \ 66 *Log << "called with a bad TU: " << TU; \ 67 } \ 68 } while(false) 69 70 class CXTUOwner { 71 CXTranslationUnitImpl *TU; 72 73 public: CXTUOwner(CXTranslationUnitImpl * tu)74 CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { } 75 ~CXTUOwner(); 76 getTU()77 CXTranslationUnitImpl *getTU() const { return TU; } 78 takeTU()79 CXTranslationUnitImpl *takeTU() { 80 CXTranslationUnitImpl *retTU = TU; 81 TU = nullptr; 82 return retTU; 83 } 84 }; 85 86 87 }} // end namespace clang::cxtu 88 89 #endif 90