blob: 590142f30f121856b31c018aef2c8567a9f0ac1c [file] [log] [blame]
Ted Kremenek7df92ae2010-11-17 23:24:11 +00001//===- CXTranslationUnit.h - Routines for manipulating CXTranslationUnits -===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines routines for manipulating CXTranslationUnits.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramer2f5db8b2014-08-13 16:25:19 +000014#ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H
15#define LLVM_CLANG_TOOLS_LIBCLANG_CXTRANSLATIONUNIT_H
Ted Kremenek7df92ae2010-11-17 23:24:11 +000016
Dmitri Gribenko256454f2014-02-11 14:34:14 +000017#include "CLog.h"
Chandler Carruth757fcd62014-03-04 10:05:20 +000018#include "CXString.h"
Chandler Carruth5553d0d2014-01-07 11:51:46 +000019#include "clang-c/Index.h"
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000020
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000021namespace clang {
22 class ASTUnit;
23 class CIndexer;
Dmitri Gribenko9e605112013-11-13 22:16:51 +000024namespace index {
25class CommentToXMLConverter;
26} // namespace index
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000027} // namespace clang
28
Ted Kremenek7df92ae2010-11-17 23:24:11 +000029struct CXTranslationUnitImpl {
Dmitri Gribenko183436e2013-01-26 21:49:50 +000030 clang::CIndexer *CIdx;
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000031 clang::ASTUnit *TheASTUnit;
Dmitri Gribenkob95b3f12013-01-26 22:44:19 +000032 clang::cxstring::CXStringPool *StringPool;
Ted Kremenekd010ba42011-11-10 08:43:12 +000033 void *Diagnostics;
Ted Kremenekd77f6212012-04-30 19:06:49 +000034 void *OverridenCursorsPool;
Dmitri Gribenko9e605112013-11-13 22:16:51 +000035 clang::index::CommentToXMLConverter *CommentToXML;
Alex Lorenz690f0e22017-12-07 20:37:50 +000036 unsigned ParsingOptions;
37 std::vector<std::string> Arguments;
Ted Kremenek7df92ae2010-11-17 23:24:11 +000038};
Ted Kremenek7df92ae2010-11-17 23:24:11 +000039
Emilio Cobos Alvarez485ad422017-04-28 15:56:39 +000040struct CXTargetInfoImpl {
41 CXTranslationUnit TranslationUnit;
42};
43
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000044namespace clang {
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000045namespace cxtu {
46
David Blaikieea4395e2017-01-06 19:49:01 +000047CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx,
48 std::unique_ptr<ASTUnit> AU);
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000049
50static inline ASTUnit *getASTUnit(CXTranslationUnit TU) {
Argyrios Kyrtzidis2bee6662013-04-09 20:03:03 +000051 if (!TU)
Craig Topper69186e72014-06-08 08:38:04 +000052 return nullptr;
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000053 return TU->TheASTUnit;
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000054}
55
Dmitri Gribenkoea4d1c32014-02-12 19:12:37 +000056/// \returns true if the ASTUnit has a diagnostic about the AST file being
57/// corrupted.
58bool isASTReadError(ASTUnit *AU);
59
Dmitri Gribenko852d6222014-02-11 15:02:48 +000060static inline bool isNotUsableTU(CXTranslationUnit TU) {
Dmitri Gribenko256454f2014-02-11 14:34:14 +000061 return !TU;
62}
63
64#define LOG_BAD_TU(TU) \
65 do { \
66 LOG_FUNC_SECTION { \
67 *Log << "called with a bad TU: " << TU; \
68 } \
69 } while(false)
70
Argyrios Kyrtzidisdc199a32011-10-17 19:48:19 +000071class CXTUOwner {
72 CXTranslationUnitImpl *TU;
73
74public:
75 CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { }
76 ~CXTUOwner();
77
78 CXTranslationUnitImpl *getTU() const { return TU; }
79
80 CXTranslationUnitImpl *takeTU() {
81 CXTranslationUnitImpl *retTU = TU;
Craig Topper69186e72014-06-08 08:38:04 +000082 TU = nullptr;
Argyrios Kyrtzidisdc199a32011-10-17 19:48:19 +000083 return retTU;
84 }
85};
86
87
Alexander Kornienkoab9db512015-06-22 23:07:51 +000088}} // end namespace clang::cxtu
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000089
Ted Kremenek7df92ae2010-11-17 23:24:11 +000090#endif