1234287Sdim//===- ChainedIncludesSource.h - Chained PCHs in Memory ---------*- C++ -*-===// 2234287Sdim// 3234287Sdim// The LLVM Compiler Infrastructure 4234287Sdim// 5234287Sdim// This file is distributed under the University of Illinois Open Source 6234287Sdim// License. See LICENSE.TXT for details. 7234287Sdim// 8234287Sdim//===----------------------------------------------------------------------===// 9234287Sdim// 10234287Sdim// This file defines the ChainedIncludesSource class, which converts headers 11234287Sdim// to chained PCHs in memory, mainly used for testing. 12234287Sdim// 13234287Sdim//===----------------------------------------------------------------------===// 14234287Sdim#ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 15234287Sdim#define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 16234287Sdim 17234287Sdim#include "clang/Sema/ExternalSemaSource.h" 18234287Sdim#include <vector> 19234287Sdim 20234287Sdimnamespace clang { 21234287Sdim class CompilerInstance; 22234287Sdim 23234287Sdimclass ChainedIncludesSource : public ExternalSemaSource { 24234287Sdimpublic: 25234287Sdim virtual ~ChainedIncludesSource(); 26234287Sdim 27234287Sdim static ChainedIncludesSource *create(CompilerInstance &CI); 28234287Sdim 29234287Sdim ExternalSemaSource &getFinalReader() const { return *FinalReader; } 30234287Sdim 31251662Sdimprivate: 32234287Sdim std::vector<CompilerInstance *> CIs; 33234287Sdim OwningPtr<ExternalSemaSource> FinalReader; 34234287Sdim 35234287Sdim 36234287Sdimprotected: 37234287Sdim 38234287Sdim//===----------------------------------------------------------------------===// 39234287Sdim// ExternalASTSource interface. 40234287Sdim//===----------------------------------------------------------------------===// 41234287Sdim 42234287Sdim virtual Decl *GetExternalDecl(uint32_t ID); 43234287Sdim virtual Selector GetExternalSelector(uint32_t ID); 44234287Sdim virtual uint32_t GetNumExternalSelectors(); 45234287Sdim virtual Stmt *GetExternalDeclStmt(uint64_t Offset); 46234287Sdim virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset); 47249423Sdim virtual bool FindExternalVisibleDeclsByName(const DeclContext *DC, 48249423Sdim DeclarationName Name); 49234287Sdim virtual ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC, 50234287Sdim bool (*isKindWeWant)(Decl::Kind), 51234287Sdim SmallVectorImpl<Decl*> &Result); 52234287Sdim virtual void CompleteType(TagDecl *Tag); 53234287Sdim virtual void CompleteType(ObjCInterfaceDecl *Class); 54234287Sdim virtual void StartedDeserializing(); 55234287Sdim virtual void FinishedDeserializing(); 56234287Sdim virtual void StartTranslationUnit(ASTConsumer *Consumer); 57234287Sdim virtual void PrintStats(); 58234287Sdim 59234287Sdim /// Return the amount of memory used by memory buffers, breaking down 60234287Sdim /// by heap-backed versus mmap'ed memory. 61234287Sdim virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const; 62234287Sdim 63234287Sdim//===----------------------------------------------------------------------===// 64234287Sdim// ExternalSemaSource interface. 65234287Sdim//===----------------------------------------------------------------------===// 66234287Sdim 67234287Sdim virtual void InitializeSema(Sema &S); 68234287Sdim virtual void ForgetSema(); 69234287Sdim virtual void ReadMethodPool(Selector Sel); 70234287Sdim virtual bool LookupUnqualified(LookupResult &R, Scope *S); 71234287Sdim}; 72234287Sdim 73234287Sdim} 74234287Sdim 75234287Sdim#endif 76