blob: 323d4b78aa9432463e1ee4aaf78d4f59bfbbe095 [file] [log] [blame]
Ted Kremenek0a90d322010-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 Gribenko5694feb2013-01-26 18:53:38 +000017#include "clang-c/Index.h"
18
Ted Kremenek0a90d322010-11-17 23:24:11 +000019extern "C" {
20struct CXTranslationUnitImpl {
Argyrios Kyrtzidisfdc17952012-03-28 02:18:05 +000021 void *CIdx;
Ted Kremenek0a90d322010-11-17 23:24:11 +000022 void *TUData;
23 void *StringPool;
Ted Kremenek15322172011-11-10 08:43:12 +000024 void *Diagnostics;
Ted Kremenekbbf66ca2012-04-30 19:06:49 +000025 void *OverridenCursorsPool;
Fariborz Jahanian88b95212012-12-18 23:02:59 +000026 void *FormatContext;
27 unsigned FormatInMemoryUniqueId;
Ted Kremenek0a90d322010-11-17 23:24:11 +000028};
29}
30
Argyrios Kyrtzidis9049cf62011-10-12 07:07:33 +000031namespace clang {
32 class ASTUnit;
Argyrios Kyrtzidisfdc17952012-03-28 02:18:05 +000033 class CIndexer;
Argyrios Kyrtzidis9049cf62011-10-12 07:07:33 +000034
35namespace cxtu {
36
Argyrios Kyrtzidisfdc17952012-03-28 02:18:05 +000037CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *TU);
Dmitri Gribenko5694feb2013-01-26 18:53:38 +000038
39static inline ASTUnit *getASTUnit(CXTranslationUnit TU) {
40 return static_cast<ASTUnit *>(TU->TUData);
41}
42
Argyrios Kyrtzidis4e7064f2011-10-17 19:48:19 +000043class CXTUOwner {
44 CXTranslationUnitImpl *TU;
45
46public:
47 CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { }
48 ~CXTUOwner();
49
50 CXTranslationUnitImpl *getTU() const { return TU; }
51
52 CXTranslationUnitImpl *takeTU() {
53 CXTranslationUnitImpl *retTU = TU;
54 TU = 0;
55 return retTU;
56 }
57};
58
59
Argyrios Kyrtzidis9049cf62011-10-12 07:07:33 +000060}} // end namespace clang::cxtu
61
Ted Kremenek0a90d322010-11-17 23:24:11 +000062#endif