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 ; |
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 *; |
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 | |
49 | static 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 | |
59 | static 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: |
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 | |