//===- CXTranslationUnit.h - Routines for manipulating CXTranslationUnits -===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines routines for manipulating CXTranslationUnits. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H #define LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H #include "CLog.h" #include "CXString.h" #include "clang-c/Index.h" namespace clang { class ASTUnit; class CIndexer; namespace index { class CommentToXMLConverter; } // namespace index } // namespace clang struct CXTranslationUnitImpl { clang::CIndexer *CIdx; clang::ASTUnit *TheASTUnit; clang::cxstring::CXStringPool *StringPool; void *Diagnostics; void *OverridenCursorsPool; clang::index::CommentToXMLConverter *CommentToXML; unsigned ParsingOptions; std::vector Arguments; }; struct CXTargetInfoImpl { CXTranslationUnit TranslationUnit; }; namespace clang { namespace cxtu { CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, std::unique_ptr AU); static inline ASTUnit *getASTUnit(CXTranslationUnit TU) { if (!TU) return nullptr; return TU->TheASTUnit; } /// \returns true if the ASTUnit has a diagnostic about the AST file being /// corrupted. bool isASTReadError(ASTUnit *AU); static inline bool isNotUsableTU(CXTranslationUnit TU) { return !TU; } #define LOG_BAD_TU(TU) \ do { \ LOG_FUNC_SECTION { \ *Log << "called with a bad TU: " << TU; \ } \ } while(false) class CXTUOwner { CXTranslationUnitImpl *TU; public: CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { } ~CXTUOwner(); CXTranslationUnitImpl *getTU() const { return TU; } CXTranslationUnitImpl *takeTU() { CXTranslationUnitImpl *retTU = TU; TU = nullptr; return retTU; } }; }} // end namespace clang::cxtu #endif