blob: c0014c0c8f1355185b032828d774d5a3a11f0da4 [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
14#ifndef LLVM_CLANG_CXTRANSLATIONUNIT_H
15#define LLVM_CLANG_CXTRANSLATIONUNIT_H
16
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000017#include "clang-c/Index.h"
Dmitri Gribenkob95b3f12013-01-26 22:44:19 +000018#include "CXString.h"
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000019
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000020namespace clang {
21 class ASTUnit;
22 class CIndexer;
Dmitri Gribenko9e605112013-11-13 22:16:51 +000023namespace index {
24class CommentToXMLConverter;
25} // namespace index
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000026} // namespace clang
27
Ted Kremenek7df92ae2010-11-17 23:24:11 +000028struct CXTranslationUnitImpl {
Dmitri Gribenko183436e2013-01-26 21:49:50 +000029 clang::CIndexer *CIdx;
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000030 clang::ASTUnit *TheASTUnit;
Dmitri Gribenkob95b3f12013-01-26 22:44:19 +000031 clang::cxstring::CXStringPool *StringPool;
Ted Kremenekd010ba42011-11-10 08:43:12 +000032 void *Diagnostics;
Ted Kremenekd77f6212012-04-30 19:06:49 +000033 void *OverridenCursorsPool;
Dmitri Gribenko9e605112013-11-13 22:16:51 +000034 clang::index::CommentToXMLConverter *CommentToXML;
Ted Kremenek7df92ae2010-11-17 23:24:11 +000035};
Ted Kremenek7df92ae2010-11-17 23:24:11 +000036
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000037namespace clang {
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000038namespace cxtu {
39
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000040CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *AU);
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000041
42static inline ASTUnit *getASTUnit(CXTranslationUnit TU) {
Argyrios Kyrtzidis2bee6662013-04-09 20:03:03 +000043 if (!TU)
44 return 0;
Dmitri Gribenkod36209e2013-01-26 21:32:42 +000045 return TU->TheASTUnit;
Dmitri Gribenkoc22ea1c2013-01-26 18:53:38 +000046}
47
Argyrios Kyrtzidisdc199a32011-10-17 19:48:19 +000048class CXTUOwner {
49 CXTranslationUnitImpl *TU;
50
51public:
52 CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { }
53 ~CXTUOwner();
54
55 CXTranslationUnitImpl *getTU() const { return TU; }
56
57 CXTranslationUnitImpl *takeTU() {
58 CXTranslationUnitImpl *retTU = TU;
59 TU = 0;
60 return retTU;
61 }
62};
63
64
Argyrios Kyrtzidis769c7bc2011-10-12 07:07:33 +000065}} // end namespace clang::cxtu
66
Ted Kremenek7df92ae2010-11-17 23:24:11 +000067#endif