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