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