clang  8.0.0svn
ExternalASTSource.cpp
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 //===----------------------------------------------------------------------===//
15 
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>
25 
26 using namespace clang;
27 
29 
32  return None;
33 }
34 
37  return EK_ReplyHazy;
38 }
39 
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 }
47 
49  if (ClangModule)
50  return ClangModule->Name;
51  else
52  return PCHModuleName;
53 }
54 
56  unsigned Length,
57  SmallVectorImpl<Decl *> &Decls) {}
58 
60 
62 
64 
66 
68 
70 
72 
74 
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 }
82 
84  return nullptr;
85 }
86 
88  return Selector();
89 }
90 
92  return 0;
93 }
94 
96  return nullptr;
97 }
98 
101  return nullptr;
102 }
103 
106  return nullptr;
107 }
108 
109 bool
111  DeclarationName Name) {
112  return false;
113 }
114 
116 
118  const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
120 
122 
124  uint32_t OldGeneration = CurrentGeneration;
125 
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  }
137 
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:87
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:466
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...
Represents a struct/union/class.
Definition: Decl.h:3602
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:154
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...
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:1164
virtual void completeVisibleDeclsMap(const DeclContext *DC)
Ensures that the table of all visible declarations inside this context is up to date.
unsigned Offset
Definition: Format.cpp:1631
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.
Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:3073
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:1262
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.
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:1082
virtual ExtKind hasExternalDefinitions(const Decl *D)
Represents a C++ base or member initializer.
Definition: DeclCXX.h:2253
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:192
virtual llvm::Optional< ASTSourceDescriptor > getSourceDescriptor(unsigned ID)
Return a descriptor for the corresponding module, if one exists.
Kind
Lists the kind of concrete classes of Decl.
Definition: DeclBase.h:90
StringRef getName() const
Definition: FileManager.h:52