ChainedIncludesSource.h revision ce0682ff4647b885d41847b0f97918504282c2e8
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; 33ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl llvm::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); 49b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void MaterializeVisibleDecls(const DeclContext *DC); 50b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual bool FindExternalLexicalDecls(const DeclContext *DC, 51b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis bool (*isKindWeWant)(Decl::Kind), 52b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis llvm::SmallVectorImpl<Decl*> &Result); 53b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void CompleteType(TagDecl *Tag); 54b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void CompleteType(ObjCInterfaceDecl *Class); 55b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void StartedDeserializing(); 56b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void FinishedDeserializing(); 57b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void StartTranslationUnit(ASTConsumer *Consumer); 58b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis virtual void PrintStats(); 59ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl 60ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl//===----------------------------------------------------------------------===// 61ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl// ExternalSemaSource interface. 62ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl//===----------------------------------------------------------------------===// 63ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl 64ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual void InitializeSema(Sema &S); 65ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual void ForgetSema(); 66ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual std::pair<ObjCMethodList,ObjCMethodList> ReadMethodPool(Selector Sel); 67ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl virtual bool LookupUnqualified(LookupResult &R, Scope *S); 68ce0682ff4647b885d41847b0f97918504282c2e8Sebastian Redl 69b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis}; 70b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 71b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis} 72b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis 73b0f4b9a558933b307073f7cd7753602f94354ae9Argyrios Kyrtzidis#endif 74