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 20namespace clang { 21 class ASTUnit; 22 class CIndexer; 23namespace index { 24class CommentToXMLConverter; 25} // namespace index 26} // namespace clang 27 28struct 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 39struct CXTargetInfoImpl { 40 CXTranslationUnit TranslationUnit; 41}; 42 43namespace clang { 44namespace cxtu { 45 46CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, 47 std::unique_ptr<ASTUnit> AU); 48 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. 57bool isASTReadError(ASTUnit *AU); 58 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 70class CXTUOwner { 71 CXTranslationUnitImpl *TU; 72 73public: 74 CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { } 75 ~CXTUOwner(); 76 77 CXTranslationUnitImpl *getTU() const { return TU; } 78 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