10a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek//===- CXTranslationUnit.h - Routines for manipulating CXTranslationUnits -===// 20a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// 30a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// The LLVM Compiler Infrastructure 40a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// 50a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// This file is distributed under the University of Illinois Open Source 60a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// License. See LICENSE.TXT for details. 70a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// 80a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek//===----------------------------------------------------------------------===// 90a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// 100a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// This file defines routines for manipulating CXTranslationUnits. 110a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek// 120a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek//===----------------------------------------------------------------------===// 130a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek 140a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek#ifndef LLVM_CLANG_CXTRANSLATIONUNIT_H 150a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek#define LLVM_CLANG_CXTRANSLATIONUNIT_H 160a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "CLog.h" 189c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko#include "CXString.h" 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang-c/Index.h" 205694feb5ccd6eb862cb600b55753cecc13794471Dmitri Gribenko 21e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenkonamespace clang { 22e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko class ASTUnit; 23e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko class CIndexer; 2486cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenkonamespace index { 2586cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenkoclass CommentToXMLConverter; 2686cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko} // namespace index 27e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko} // namespace clang 28e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko 290a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenekstruct CXTranslationUnitImpl { 308c718e7d87018919b5b84b0d545fe477b2d532d1Dmitri Gribenko clang::CIndexer *CIdx; 31e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko clang::ASTUnit *TheASTUnit; 329c48d16a11872624410ab3a5944edcba0f32818cDmitri Gribenko clang::cxstring::CXStringPool *StringPool; 33153221717e39ce41323d5bc6b8b8bf130923c1bdTed Kremenek void *Diagnostics; 34bbf66ca1dad17773cc682d69b8482c4e179aeaebTed Kremenek void *OverridenCursorsPool; 3586cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko clang::index::CommentToXMLConverter *CommentToXML; 360a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek}; 370a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek 389049cf6cb468c856888e88251dab659955fa767eArgyrios Kyrtzidisnamespace clang { 399049cf6cb468c856888e88251dab659955fa767eArgyrios Kyrtzidisnamespace cxtu { 409049cf6cb468c856888e88251dab659955fa767eArgyrios Kyrtzidis 41e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri GribenkoCXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *AU); 425694feb5ccd6eb862cb600b55753cecc13794471Dmitri Gribenko 435694feb5ccd6eb862cb600b55753cecc13794471Dmitri Gribenkostatic inline ASTUnit *getASTUnit(CXTranslationUnit TU) { 4484347225fcf5aae5ff982e94f4c95548ae26b846Argyrios Kyrtzidis if (!TU) 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return nullptr; 46e42e578ad8a36ad5bd06c8a3110cbd3119aaee36Dmitri Gribenko return TU->TheASTUnit; 475694feb5ccd6eb862cb600b55753cecc13794471Dmitri Gribenko} 485694feb5ccd6eb862cb600b55753cecc13794471Dmitri Gribenko 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// \returns true if the ASTUnit has a diagnostic about the AST file being 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// corrupted. 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesbool isASTReadError(ASTUnit *AU); 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic inline bool isNotUsableTU(CXTranslationUnit TU) { 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return !TU; 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define LOG_BAD_TU(TU) \ 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines do { \ 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LOG_FUNC_SECTION { \ 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines *Log << "called with a bad TU: " << TU; \ 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } \ 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } while(false) 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 644e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidisclass CXTUOwner { 654e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnitImpl *TU; 664e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 674e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidispublic: 684e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTUOwner(CXTranslationUnitImpl *tu) : TU(tu) { } 694e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis ~CXTUOwner(); 704e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 714e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnitImpl *getTU() const { return TU; } 724e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 734e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnitImpl *takeTU() { 744e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis CXTranslationUnitImpl *retTU = TU; 75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines TU = nullptr; 764e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis return retTU; 774e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis } 784e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis}; 794e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 804e7064fa7e344e8f87a5b8457e96dfdd252c4a9eArgyrios Kyrtzidis 819049cf6cb468c856888e88251dab659955fa767eArgyrios Kyrtzidis}} // end namespace clang::cxtu 829049cf6cb468c856888e88251dab659955fa767eArgyrios Kyrtzidis 830a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremenek#endif 84