12#ifndef LLVM_CLANG_SEMA_EXTERNALSEMASOURCE_H
13#define LLVM_CLANG_SEMA_EXTERNALSEMASOURCE_H
19#include "llvm/ADT/MapVector.h"
28class CXXConstructorDecl;
37struct LateParsedTemplate;
144 llvm::SmallPtrSetImpl<const TypedefNameDecl *> &Decls) {}
201 llvm::MapVector<
const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
224 bool EnteringContext,
245 bool isA(
const void *ClassID)
const override {
258template <
typename T,
void (ExternalSemaSource::*Loader)(SmallVectorImpl<T> &),
259 unsigned LoadedStorage = 2,
unsigned LocalStorage = 4>
282 :
public llvm::iterator_adaptor_base<
283 iterator, int, std::random_access_iterator_tag, T, int, T *, T &> {
289 : iterator::iterator_adaptor_base(Position), Self(Self) {}
291 bool isLoaded()
const {
return this->I < 0; }
298 return Self->Loaded.end()[this->I];
299 return Self->Local.begin()[this->I];
305 return iterator(
this, 0);
308 (source->*Loader)(Loaded);
309 return iterator(
this, -(
int)Loaded.size());
312 iterator
end() {
return iterator(
this, Local.size()); }
314 void push_back(
const T &LocalValue) { Local.push_back(LocalValue); }
316 void erase(iterator From, iterator To) {
317 if (From.isLoaded() && To.isLoaded()) {
318 Loaded.erase(&*From, &*To);
322 if (From.isLoaded()) {
323 Loaded.erase(&*From, Loaded.end());
324 From =
begin(
nullptr,
true);
327 Local.erase(&*From, &*To);
C Language Family Type Representation.
Represents a C++ struct/union/class.
Represents a C++ nested-name-specifier or a global scope specifier.
Base class for callback objects used by Sema::CorrectTypo to check the validity of a potential typo c...
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
virtual bool isA(const void *ClassID) const
LLVM-style RTTI.
ExternalASTSource()=default
An abstract interface that should be implemented by external AST sources that also provide informatio...
virtual void updateOutOfDateSelector(Selector Sel)
Load the contents of the global method pool for a given selector if necessary.
virtual void ReadMethodPool(Selector Sel)
Load the contents of the global method pool for a given selector.
virtual void ReadExtnameUndeclaredIdentifiers(SmallVectorImpl< std::pair< IdentifierInfo *, AsmLabelAttr * > > &EI)
Read the set of pragma redefine_extname'd, undeclared identifiers known to the external Sema source.
virtual void ReadUndefinedButUsed(llvm::MapVector< NamedDecl *, SourceLocation > &Undefined)
Load the set of used but not defined functions or variables with internal linkage,...
virtual TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo, int LookupKind, Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, DeclContext *MemberContext, bool EnteringContext, const ObjCObjectPointerType *OPT)
Try to "correct" a typo in the source code by finding visible declarations whose names are similar to...
virtual void ReadTentativeDefinitions(SmallVectorImpl< VarDecl * > &TentativeDefs)
Read the set of tentative definitions known to the external Sema source.
virtual void InitializeSema(Sema &S)
Initialize the semantic source with the Sema instance being used to perform semantic analysis on the ...
virtual void ReadUnusedLocalTypedefNameCandidates(llvm::SmallPtrSetImpl< const TypedefNameDecl * > &Decls)
Read the set of potentially unused typedefs known to the source.
bool isA(const void *ClassID) const override
LLVM-style RTTI.
virtual void ReadUsedVTables(SmallVectorImpl< ExternalVTableUse > &VTables)
Read the set of used vtables known to the external Sema source.
~ExternalSemaSource() override
virtual void ReadUnusedFileScopedDecls(SmallVectorImpl< const DeclaratorDecl * > &Decls)
Read the set of unused file-scope declarations known to the external Sema source.
static bool classof(const ExternalASTSource *S)
virtual bool LookupUnqualified(LookupResult &R, Scope *S)
Do last resort, unqualified lookup on a LookupResult that Sema cannot find.
virtual void ReadKnownNamespaces(SmallVectorImpl< NamespaceDecl * > &Namespaces)
Load the set of namespaces that are known to the external source, which will be used during typo corr...
virtual bool MaybeDiagnoseMissingCompleteType(SourceLocation Loc, QualType T)
Produces a diagnostic note if the external source contains a complete definition for T.
ExternalSemaSource()=default
virtual void ReadWeakUndeclaredIdentifiers(SmallVectorImpl< std::pair< IdentifierInfo *, WeakInfo > > &WI)
Read the set of weak, undeclared identifiers known to the external Sema source.
virtual void ReadLateParsedTemplates(llvm::MapVector< const FunctionDecl *, std::unique_ptr< LateParsedTemplate > > &LPTMap)
Read the set of late parsed template functions for this source.
virtual void ReadExtVectorDecls(SmallVectorImpl< TypedefNameDecl * > &Decls)
Read the set of ext_vector type declarations known to the external Sema source.
virtual void ReadDeclsToCheckForDeferredDiags(llvm::SmallSetVector< Decl *, 4 > &Decls)
Read the set of decls to be checked for deferred diags.
virtual void ReadDelegatingConstructors(SmallVectorImpl< CXXConstructorDecl * > &Decls)
Read the set of delegating constructors known to the external Sema source.
virtual void ReadMismatchingDeleteExpressions(llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 > > &)
virtual void ForgetSema()
Inform the semantic consumer that Sema is no longer available.
virtual void ReadPendingInstantiations(SmallVectorImpl< std::pair< ValueDecl *, SourceLocation > > &Pending)
Read the set of pending instantiations known to the external Sema source.
virtual void ReadReferencedSelectors(SmallVectorImpl< std::pair< Selector, SourceLocation > > &Sels)
Read the set of referenced selectors known to the external Sema source.
Represents a member of a struct/union/class.
Represents a function declaration or definition.
iterator::reference operator*() const
Represents a lazily-loaded vector of data.
void push_back(const T &LocalValue)
void erase(iterator From, iterator To)
iterator begin(ExternalSemaSource *source, bool LocalOnly=false)
Represents the results of name lookup.
Represents a pointer to an Objective C object.
A (possibly-)qualified type.
Scope - A scope is a transient data structure that is used while parsing the program.
Smart pointer class that efficiently represents Objective-C method names.
Sema - This implements semantic analysis and AST building for C.
Encodes a location in the source.
Simple class containing the result of Sema::CorrectTypo.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Top level wrappers for InstallAPI frontend operations.
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
@ Undefined
Keep undefined.
const FunctionProtoType * T
Diagnostic wrappers for TextAPI types for error reporting.
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
A simple structure that captures a vtable use for the purposes of the ExternalSemaSource.