clang API Documentation
00001 //===- ChainedIncludesSource.h - Chained PCHs in Memory ---------*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file defines the ChainedIncludesSource class, which converts headers 00011 // to chained PCHs in memory, mainly used for testing. 00012 // 00013 //===----------------------------------------------------------------------===// 00014 #ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 00015 #define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 00016 00017 #include "clang/Sema/ExternalSemaSource.h" 00018 #include <vector> 00019 00020 namespace clang { 00021 class CompilerInstance; 00022 00023 class ChainedIncludesSource : public ExternalSemaSource { 00024 public: 00025 virtual ~ChainedIncludesSource(); 00026 00027 static ChainedIncludesSource *create(CompilerInstance &CI); 00028 00029 private: 00030 ExternalSemaSource &getFinalReader() const { return *FinalReader; } 00031 00032 std::vector<CompilerInstance *> CIs; 00033 OwningPtr<ExternalSemaSource> FinalReader; 00034 00035 00036 protected: 00037 00038 //===----------------------------------------------------------------------===// 00039 // ExternalASTSource interface. 00040 //===----------------------------------------------------------------------===// 00041 00042 virtual Decl *GetExternalDecl(uint32_t ID); 00043 virtual Selector GetExternalSelector(uint32_t ID); 00044 virtual uint32_t GetNumExternalSelectors(); 00045 virtual Stmt *GetExternalDeclStmt(uint64_t Offset); 00046 virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset); 00047 virtual DeclContextLookupResult 00048 FindExternalVisibleDeclsByName(const DeclContext *DC, DeclarationName Name); 00049 virtual ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC, 00050 bool (*isKindWeWant)(Decl::Kind), 00051 SmallVectorImpl<Decl*> &Result); 00052 virtual void CompleteType(TagDecl *Tag); 00053 virtual void CompleteType(ObjCInterfaceDecl *Class); 00054 virtual void StartedDeserializing(); 00055 virtual void FinishedDeserializing(); 00056 virtual void StartTranslationUnit(ASTConsumer *Consumer); 00057 virtual void PrintStats(); 00058 00059 /// Return the amount of memory used by memory buffers, breaking down 00060 /// by heap-backed versus mmap'ed memory. 00061 virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const; 00062 00063 //===----------------------------------------------------------------------===// 00064 // ExternalSemaSource interface. 00065 //===----------------------------------------------------------------------===// 00066 00067 virtual void InitializeSema(Sema &S); 00068 virtual void ForgetSema(); 00069 virtual void ReadMethodPool(Selector Sel); 00070 virtual bool LookupUnqualified(LookupResult &R, Scope *S); 00071 }; 00072 00073 } 00074 00075 #endif