| //===- 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<std::string> Arguments; |
| }; |
| |
| struct CXTargetInfoImpl { |
| CXTranslationUnit TranslationUnit; |
| }; |
| |
| namespace clang { |
| namespace cxtu { |
| |
| CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, |
| std::unique_ptr<ASTUnit> 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 |