clang  6.0.0svn
Go to the documentation of this file.
1 //===- ExternalASTSource.cpp - Abstract External AST Interface ------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file provides the default implementation of the ExternalASTSource
11 // interface, which enables construction of AST nodes from some external
12 // source.
13 //
14 //===----------------------------------------------------------------------===//
17 #include "clang/AST/ASTContext.h"
20 #include "clang/Basic/LLVM.h"
21 #include "clang/Basic/Module.h"
22 #include "llvm/ADT/None.h"
23 #include "llvm/Support/ErrorHandling.h"
24 #include <cstdint>
26 using namespace clang;
32  return None;
33 }
37  return EK_ReplyHazy;
38 }
41  : Signature(M.Signature), ClangModule(&M) {
42  if (M.Directory)
43  Path = M.Directory->getName();
44  if (auto *File = M.getASTFile())
45  ASTFile = File->getName();
46 }
49  if (ClangModule)
50  return ClangModule->Name;
51  else
52  return PCHModuleName;
53 }
56  unsigned Length,
57  SmallVectorImpl<Decl *> &Decls) {}
76  const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,
77  llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets,
78  llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,
79  llvm::DenseMap<const CXXRecordDecl *, CharUnits> &VirtualBaseOffsets) {
80  return false;
81 }
84  return nullptr;
85 }
88  return Selector();
89 }
92  return 0;
93 }
96  return nullptr;
97 }
101  return nullptr;
102 }
106  return nullptr;
107 }
109 bool
111  DeclarationName Name) {
112  return false;
113 }
118  const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
124  uint32_t OldGeneration = CurrentGeneration;
126  // Make sure the generation of the topmost external source for the context is
127  // incremented. That might not be us.
128  auto *P = C.getExternalSource();
129  if (P && P != this)
130  CurrentGeneration = P->incrementGeneration(C);
131  else {
132  // FIXME: Only bump the generation counter if the current generation number
133  // has been observed?
134  if (!++CurrentGeneration)
135  llvm::report_fatal_error("generation counter overflowed", false);
136  }
138  return OldGeneration;
139 }
Defines the clang::ASTContext interface.
std::string Name
The name of this module.
Definition: Module.h:68
Smart pointer class that efficiently represents Objective-C method names.
virtual Decl * GetExternalDecl(uint32_t ID)
Resolve a declaration ID into a declaration, potentially building a new declaration.
virtual void FindExternalLexicalDecls(const DeclContext *DC, llvm::function_ref< bool(Decl::Kind)> IsKindWeWant, SmallVectorImpl< Decl *> &Result)
Finds all declarations lexically contained within the given DeclContext, after applying an optional f...
ASTConsumer - This is an abstract interface that should be implemented by clients that read ASTs...
Definition: ASTConsumer.h:34
Stmt - This represents one statement.
Definition: Stmt.h:66
Defines the clang::Module class, which describes a module in the source code.
Decl - This represents one declaration (or definition), e.g.
Definition: DeclBase.h:86
StringRef P
virtual uint32_t GetNumExternalSelectors()
Returns the number of selectors known to the external AST source.
const FileEntry * getASTFile() const
The serialized AST file for this module, if one was created.
Definition: Module.h:448
virtual bool layoutRecordType(const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment, llvm::DenseMap< const FieldDecl *, uint64_t > &FieldOffsets, llvm::DenseMap< const CXXRecordDecl *, CharUnits > &BaseOffsets, llvm::DenseMap< const CXXRecordDecl *, CharUnits > &VirtualBaseOffsets)
Perform layout on the given record.
virtual void FindFileRegionDecls(FileID File, unsigned Offset, unsigned Length, SmallVectorImpl< Decl *> &Decls)
Get the decls that are contained in a file in the Offset/Length range.
virtual void PrintStats()
Print any statistics that have been gathered regarding the external AST source.
virtual void CompleteRedeclChain(const Decl *D)
Gives the external AST source an opportunity to complete the redeclaration chain for a declaration...
virtual Selector GetExternalSelector(uint32_t ID)
Resolve a selector ID into a selector.
virtual void StartedDeserializing()
Notify ExternalASTSource that we started deserialization of a decl or type so until FinishedDeseriali...
RecordDecl - Represents a struct/union/class.
Definition: Decl.h:3482
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:149
uint32_t incrementGeneration(ASTContext &C)
Increment the current generation.
virtual CXXBaseSpecifier * GetExternalCXXBaseSpecifiers(uint64_t Offset)
Resolve the offset of a set of C++ base specifiers in the decl stream into an array of specifiers...
Describes a module or submodule.
Definition: Module.h:65
virtual bool FindExternalVisibleDeclsByName(const DeclContext *DC, DeclarationName Name)
Find all declarations with the given name in the given context, and add them to the context by callin...
uint32_t Offset
Definition: CacheTokens.cpp:43
virtual void FinishedDeserializing()
Notify ExternalASTSource that we finished the deserialization of a decl or type.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
Represents an ObjC class declaration.
Definition: DeclObjC.h:1191
virtual void completeVisibleDeclsMap(const DeclContext *DC)
Ensures that the table of all visible declarations inside this context is up to date.
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
The result type of a method or function.
MemoryBufferSizes getMemoryBufferSizes() const
Return the amount of memory used by memory buffers, breaking down by heap-backed versus mmap&#39;ed memor...
const DirectoryEntry * Directory
The build directory of this module.
Definition: Module.h:96
virtual Stmt * GetExternalDeclStmt(uint64_t Offset)
Resolve the offset of a statement in the decl stream into a statement.
TagDecl - Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:2938
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Dataflow Directional Tag Classes.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Definition: DeclBase.h:1252
virtual void StartTranslationUnit(ASTConsumer *Consumer)
Function that will be invoked when we begin parsing a new translation unit involving this external AS...
virtual void ReadComments()
Loads comment ranges.
DeclarationName - The name of a declaration.
virtual CXXCtorInitializer ** GetExternalCXXCtorInitializers(uint64_t Offset)
Resolve the offset of a set of C++ constructor initializers in the decl stream into an array of initi...
ExternalASTSource * getExternalSource() const
Retrieve a pointer to the external AST source associated with this AST context, if any...
Definition: ASTContext.h:1048
virtual ExtKind hasExternalDefinitions(const Decl *D)
Represents a C++ base or member initializer.
Definition: DeclCXX.h:2172
virtual void CompleteType(TagDecl *Tag)
Gives the external AST source an opportunity to complete an incomplete type.
Represents a base class of a C++ class.
Definition: DeclCXX.h:191
virtual llvm::Optional< ASTSourceDescriptor > getSourceDescriptor(unsigned ID)
Return a descriptor for the corresponding module, if one exists.
Lists the kind of concrete classes of Decl.
Definition: DeclBase.h:89
StringRef getName() const
Definition: FileManager.h:51