1b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis//===- ChainedIncludesSource.h - Chained PCHs in Memory ---------*- C++ -*-===// 2b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// 3b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// The LLVM Compiler Infrastructure 4b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// 5b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 6b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// License. See LICENSE.TXT for details. 7b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// 8b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// 10b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// This file defines the ChainedIncludesSource class, which converts headers 11b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// to chained PCHs in memory, mainly used for testing. 12b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// 13b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 14b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis#ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 15b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis#define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H 16b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 17ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl#include "clang/Sema/ExternalSemaSource.h" 18b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis#include <vector> 19b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 20b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidisnamespace clang { 21b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis class CompilerInstance; 22b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 23ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redlclass ChainedIncludesSource : public ExternalSemaSource { 24b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidispublic: 25b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual ~ChainedIncludesSource(); 26b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 27b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis static ChainedIncludesSource *create(CompilerInstance &CI); 28b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 29b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidisprivate: 30ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl ExternalSemaSource &getFinalReader() const { return *FinalReader; } 31b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 32b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis std::vector<CompilerInstance *> CIs; 336f42b62b6194f53bcbc349f5d17388e1936535d7Dylan Noblesmith OwningPtr<ExternalSemaSource> FinalReader; 34b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 35b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 36b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidisprotected: 37b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 38b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 39b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis// ExternalASTSource interface. 40b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 41b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 42b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual Decl *GetExternalDecl(uint32_t ID); 43b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual Selector GetExternalSelector(uint32_t ID); 44b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual uint32_t GetNumExternalSelectors(); 45b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual Stmt *GetExternalDeclStmt(uint64_t Offset); 46b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset); 47b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual DeclContextLookupResult 48b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis FindExternalVisibleDeclsByName(const DeclContext *DC, DeclarationName Name); 49ba6ffaf21e465c0926d7fc5fa294ea52f8d45fafDouglas Gregor virtual ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC, 50b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis bool (*isKindWeWant)(Decl::Kind), 51686775deca8b8685eb90801495880e3abdd844c2Chris Lattner SmallVectorImpl<Decl*> &Result); 52b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void CompleteType(TagDecl *Tag); 53b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void CompleteType(ObjCInterfaceDecl *Class); 54b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void StartedDeserializing(); 55b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void FinishedDeserializing(); 56b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void StartTranslationUnit(ASTConsumer *Consumer); 57b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void PrintStats(); 58ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl 59e9b5f3d4acfc2ad6e8b65a4072464e997dea9ed3Ted Kremenek /// Return the amount of memory used by memory buffers, breaking down 60e9b5f3d4acfc2ad6e8b65a4072464e997dea9ed3Ted Kremenek /// by heap-backed versus mmap'ed memory. 61e9b5f3d4acfc2ad6e8b65a4072464e997dea9ed3Ted Kremenek virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const; 62e9b5f3d4acfc2ad6e8b65a4072464e997dea9ed3Ted Kremenek 63ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl//===----------------------------------------------------------------------===// 64ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl// ExternalSemaSource interface. 65ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl//===----------------------------------------------------------------------===// 66ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl 67ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual void InitializeSema(Sema &S); 68ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual void ForgetSema(); 695ac4b6917aa34fae6da64036539023a6155a3d48Douglas Gregor virtual void ReadMethodPool(Selector Sel); 70ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual bool LookupUnqualified(LookupResult &R, Scope *S); 71b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis}; 72b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 73b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis} 74b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 75b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis#endif 76