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