clang: clang::MultiplexExternalSemaSource Class Reference (original) (raw)

An abstract interface that should be implemented by external AST sources that also provide information for semantic analysis. More...

Public Member Functions

MultiplexExternalSemaSource (ExternalSemaSource *S1, ExternalSemaSource *S2)

Constructs a new multiplexing external sema source and appends the given element to it.

~MultiplexExternalSemaSource () override

void

AddSource (ExternalSemaSource *Source)

Appends new source to the source list.

Decl *

GetExternalDecl (GlobalDeclID ID) override

Resolve a declaration ID into a declaration, potentially building a new declaration.

void

CompleteRedeclChain (const Decl *D) override

Complete the redeclaration chain if it's been extended since the previous generation of the AST source.

Selector

GetExternalSelector (uint32_t ID) override

Resolve a selector ID into a selector.

uint32_t

GetNumExternalSelectors () override

Returns the number of selectors known to the external AST source.

Stmt *

GetExternalDeclStmt (uint64_t Offset) override

Resolve the offset of a statement in the decl stream into a statement.

CXXBaseSpecifier *

GetExternalCXXBaseSpecifiers (uint64_t Offset) override

Resolve the offset of a set of C++ base specifiers in the decl stream into an array of specifiers.

CXXCtorInitializer **

GetExternalCXXCtorInitializers (uint64_t Offset) override

Resolve a handle to a list of ctor initializers into the list of initializers themselves.

ExtKind

hasExternalDefinitions (const Decl *D) override

bool

FindExternalVisibleDeclsByName (const DeclContext *DC, DeclarationName Name, const DeclContext *OriginalDC) override

Find all declarations with the given name in the given context.

bool

LoadExternalSpecializations (const Decl *D, bool OnlyPartial) override

Load all the external specializations for the Decl.

bool

LoadExternalSpecializations (const Decl *D, ArrayRef< TemplateArgument > TemplateArgs) override

Load all the specializations for the Decl.

void

completeVisibleDeclsMap (const DeclContext *DC) override

Ensures that the table of all visible declarations inside this context is up to date.

void

FindExternalLexicalDecls (const DeclContext *DC, llvm::function_ref< bool(Decl::Kind)> IsKindWeWant, SmallVectorImpl< Decl * > &Result) override

Finds all declarations lexically contained within the given DeclContext, after applying an optional filter predicate.

void

FindFileRegionDecls (FileID File, unsigned Offset, unsigned Length, SmallVectorImpl< Decl * > &Decls) override

Get the decls that are contained in a file in the Offset/Length range.

void

CompleteType (TagDecl *Tag) override

Gives the external AST source an opportunity to complete an incomplete type.

void

CompleteType (ObjCInterfaceDecl *Class) override

Gives the external AST source an opportunity to complete an incomplete Objective-C class.

void

ReadComments () override

Loads comment ranges.

void

StartedDeserializing () override

Notify ExternalASTSource that we started deserialization of a decl or type so until FinishedDeserializing is called there may be decls that are initializing.

void

FinishedDeserializing () override

Notify ExternalASTSource that we finished the deserialization of a decl or type.

void

StartTranslationUnit (ASTConsumer *Consumer) override

Function that will be invoked when we begin parsing a new translation unit involving this external AST source.

void

PrintStats () override

Print any statistics that have been gathered regarding the external AST source.

Module *

getModule (unsigned ID) override

Retrieve the module that corresponds to the given module ID.

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) override

Perform layout on the given record.

void

getMemoryBufferSizes (MemoryBufferSizes &sizes) const override

Return the amount of memory used by memory buffers, breaking down by heap-backed versus mmap'ed memory.

void

InitializeSema (Sema &S) override

Initialize the semantic source with the Sema instance being used to perform semantic analysis on the abstract syntax tree.

void

ForgetSema () override

Inform the semantic consumer that Sema is no longer available.

void

ReadMethodPool (Selector Sel) override

Load the contents of the global method pool for a given selector.

void

updateOutOfDateSelector (Selector Sel) override

Load the contents of the global method pool for a given selector if necessary.

void

ReadKnownNamespaces (SmallVectorImpl< NamespaceDecl * > &Namespaces) override

Load the set of namespaces that are known to the external source, which will be used during typo correction.

void

ReadUndefinedButUsed (llvm::MapVector< NamedDecl *, SourceLocation > &Undefined) override

Load the set of used but not defined functions or variables with internal linkage, or used but not defined inline functions.

void

ReadMismatchingDeleteExpressions (llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 > > &Exprs) override

bool

LookupUnqualified (LookupResult &R, Scope *S) override

Do last resort, unqualified lookup on a LookupResult that Sema cannot find.

void

ReadTentativeDefinitions (SmallVectorImpl< VarDecl * > &Defs) override

Read the set of tentative definitions known to the external Sema source.

void

ReadUnusedFileScopedDecls (SmallVectorImpl< const DeclaratorDecl * > &Decls) override

Read the set of unused file-scope declarations known to the external Sema source.

void

ReadDelegatingConstructors (SmallVectorImpl< CXXConstructorDecl * > &Decls) override

Read the set of delegating constructors known to the external Sema source.

void

ReadExtVectorDecls (SmallVectorImpl< TypedefNameDecl * > &Decls) override

Read the set of ext_vector type declarations known to the external Sema source.

void

ReadUnusedLocalTypedefNameCandidates (llvm::SmallSetVector< const TypedefNameDecl *, 4 > &Decls) override

Read the set of potentially unused typedefs known to the source.

void

ReadReferencedSelectors (SmallVectorImpl< std::pair< Selector, SourceLocation > > &Sels) override

Read the set of referenced selectors known to the external Sema source.

void

ReadWeakUndeclaredIdentifiers (SmallVectorImpl< std::pair< IdentifierInfo *, WeakInfo > > &WI) override

Read the set of weak, undeclared identifiers known to the external Sema source.

void

ReadUsedVTables (SmallVectorImpl< ExternalVTableUse > &VTables) override

Read the set of used vtables known to the external Sema source.

void

ReadPendingInstantiations (SmallVectorImpl< std::pair< ValueDecl *, SourceLocation > > &Pending) override

Read the set of pending instantiations known to the external Sema source.

void

ReadLateParsedTemplates (llvm::MapVector< const FunctionDecl *, std::unique_ptr< LateParsedTemplate > > &LPTMap) override

Read the set of late parsed template functions for this source.

void

ReadDeclsToCheckForDeferredDiags (llvm::SmallSetVector< Decl *, 4 > &Decls) override

Read the set of decls to be checked for deferred diags.

TypoCorrection

CorrectTypo (const DeclarationNameInfo &Typo, int LookupKind, Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, DeclContext *MemberContext, bool EnteringContext, const ObjCObjectPointerType *OPT) override

Try to "correct" a typo in the source code by finding visible declarations whose names are similar to the name that was present in the source code.

bool

MaybeDiagnoseMissingCompleteType (SourceLocation Loc, QualType T) override

Produces a diagnostic note if one of the attached sources contains a complete definition for T.

void

AssignedLambdaNumbering (CXXRecordDecl *Lambda) override

Notify the external source that a lambda was assigned a mangling number.

- Public Member Functions inherited from clang::ExternalSemaSource

ExternalSemaSource ()=default

~ExternalSemaSource () override

virtual void

InitializeSema (Sema &S)

Initialize the semantic source with the Sema instance being used to perform semantic analysis on the abstract syntax tree.

virtual void

ForgetSema ()

Inform the semantic consumer that Sema is no longer available.

virtual void

ReadMethodPool (Selector Sel)

Load the contents of the global method pool for a given selector.

virtual void

updateOutOfDateSelector (Selector Sel)

Load the contents of the global method pool for a given selector if necessary.

virtual void

ReadKnownNamespaces (SmallVectorImpl< NamespaceDecl * > &Namespaces)

Load the set of namespaces that are known to the external source, which will be used during typo correction.

virtual void

ReadUndefinedButUsed (llvm::MapVector< NamedDecl *, SourceLocation > &Undefined)

Load the set of used but not defined functions or variables with internal linkage, or used but not defined internal functions.

virtual void

ReadMismatchingDeleteExpressions (llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 > > &)

virtual bool

LookupUnqualified (LookupResult &R, Scope *S)

Do last resort, unqualified lookup on a LookupResult that Sema cannot find.

virtual void

ReadTentativeDefinitions (SmallVectorImpl< VarDecl * > &TentativeDefs)

Read the set of tentative definitions known to the external Sema source.

virtual void

ReadUnusedFileScopedDecls (SmallVectorImpl< const DeclaratorDecl * > &Decls)

Read the set of unused file-scope declarations known to the external Sema source.

virtual void

ReadDelegatingConstructors (SmallVectorImpl< CXXConstructorDecl * > &Decls)

Read the set of delegating constructors known to the external Sema source.

virtual void

ReadExtVectorDecls (SmallVectorImpl< TypedefNameDecl * > &Decls)

Read the set of ext_vector type declarations known to the external Sema source.

virtual void

ReadUnusedLocalTypedefNameCandidates (llvm::SmallSetVector< const TypedefNameDecl *, 4 > &Decls)

Read the set of potentially unused typedefs known to the source.

virtual void

ReadReferencedSelectors (SmallVectorImpl< std::pair< Selector, SourceLocation > > &Sels)

Read the set of referenced selectors known to the external Sema source.

virtual void

ReadWeakUndeclaredIdentifiers (SmallVectorImpl< std::pair< IdentifierInfo *, WeakInfo > > &WI)

Read the set of weak, undeclared identifiers known to the external Sema source.

virtual void

ReadUsedVTables (SmallVectorImpl< ExternalVTableUse > &VTables)

Read the set of used vtables known to the external Sema source.

virtual void

ReadPendingInstantiations (SmallVectorImpl< std::pair< ValueDecl *, SourceLocation > > &Pending)

Read the set of pending instantiations 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

ReadDeclsToCheckForDeferredDiags (llvm::SmallSetVector< Decl *, 4 > &Decls)

Read the set of decls to be checked for deferred diags.

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 the name that was present in the source code.

virtual bool

MaybeDiagnoseMissingCompleteType (SourceLocation Loc, QualType T)

Produces a diagnostic note if the external source contains a complete definition for T.

virtual void

AssignedLambdaNumbering (CXXRecordDecl *Lambda)

Notify the external source that a lambda was assigned a mangling number.

- Public Member Functions inherited from clang::ExternalASTSource

ExternalASTSource ()=default

virtual

~ExternalASTSource ()

uint32_t

getGeneration () const

Get the current generation of this AST source.

virtual Decl *

GetExternalDecl (GlobalDeclID ID)

Resolve a declaration ID into a declaration, potentially building a new declaration.

virtual Selector

GetExternalSelector (uint32_t ID)

Resolve a selector ID into a selector.

virtual uint32_t

GetNumExternalSelectors ()

Returns the number of selectors known to the external AST source.

virtual Stmt *

GetExternalDeclStmt (uint64_t Offset)

Resolve the offset of a statement in the decl stream into a statement.

virtual CXXCtorInitializer **

GetExternalCXXCtorInitializers (uint64_t Offset)

Resolve the offset of a set of C++ constructor initializers in the decl stream into an array of initializers.

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.

virtual void

updateOutOfDateIdentifier (const IdentifierInfo &II)

Update an out-of-date identifier.

virtual bool

FindExternalVisibleDeclsByName (const DeclContext *DC, DeclarationName Name, const DeclContext *OriginalDC)

Find all declarations with the given name in the given context, and add them to the context by calling SetExternalVisibleDeclsForName or SetNoExternalVisibleDeclsForName.

virtual bool

LoadExternalSpecializations (const Decl *D, bool OnlyPartial)

Load all the external specializations for the Decl.

virtual bool

LoadExternalSpecializations (const Decl *D, ArrayRef< TemplateArgument > TemplateArgs)

Load all the specializations for the Decl.

virtual void

completeVisibleDeclsMap (const DeclContext *DC)

Ensures that the table of all visible declarations inside this context is up to date.

virtual Module *

getModule (unsigned ID)

Retrieve the module that corresponds to the given module ID.

virtual std::optional< ASTSourceDescriptor >

getSourceDescriptor (unsigned ID)

Return a descriptor for the corresponding module, if one exists.

virtual ExtKind

hasExternalDefinitions (const Decl *D)

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 filter predicate.

void

FindExternalLexicalDecls (const DeclContext *DC, SmallVectorImpl< Decl * > &Result)

Finds all declarations lexically contained within the given DeclContext.

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

CompleteRedeclChain (const Decl *D)

Gives the external AST source an opportunity to complete the redeclaration chain for a declaration.

virtual void

CompleteType (TagDecl *Tag)

Gives the external AST source an opportunity to complete an incomplete type.

virtual void

CompleteType (ObjCInterfaceDecl *Class)

Gives the external AST source an opportunity to complete an incomplete Objective-C class.

virtual void

ReadComments ()

Loads comment ranges.

virtual void

StartedDeserializing ()

Notify ExternalASTSource that we started deserialization of a decl or type so until FinishedDeserializing is called there may be decls that are initializing.

virtual void

FinishedDeserializing ()

Notify ExternalASTSource that we finished the deserialization of a decl or type.

virtual void

StartTranslationUnit (ASTConsumer *Consumer)

Function that will be invoked when we begin parsing a new translation unit involving this external AST source.

virtual void

PrintStats ()

Print any statistics that have been gathered regarding the external AST source.

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.

MemoryBufferSizes

getMemoryBufferSizes () const

Return the amount of memory used by memory buffers, breaking down by heap-backed versus mmap'ed memory.

virtual void

getMemoryBufferSizes (MemoryBufferSizes &sizes) const

bool

isA (const void *ClassID) const override

LLVM-style RTTI.

static bool

classof (const ExternalASTSource *S)

An abstract interface that should be implemented by external AST sources that also provide information for semantic analysis.

Definition at line 38 of file MultiplexExternalSemaSource.h.

Try to "correct" a typo in the source code by finding visible declarations whose names are similar to the name that was present in the source code.

Parameters

TypoName the DeclarationNameInfo structure that contains the name that was present in the source code along with its location.
LookupKind the name-lookup criteria used to search for the name.
S the scope in which name lookup occurs.
SS the nested-name-specifier that precedes the name we're looking for, if present.
CCC A CorrectionCandidateCallback object that provides further validation of typo correction candidates. It also provides flags for determining the set of keywords permitted.
MemberContext if non-NULL, the context in which to look for a member access expression.
EnteringContext whether we're entering the context described by the nested-name-specifier SS.
OPT when non-NULL, the search for visible declarations will also walk the protocols in the qualified interfaces of OPT.

Returns

a [TypoCorrection](classclang%5F1%5F1TypoCorrection.html "Simple class containing the result of Sema::CorrectTypo.") containing the corrected name if the typo along with information such as the [NamedDecl](classclang%5F1%5F1NamedDecl.html "This represents a decl that may have a name.") where the corrected name was declared, and any additional [NestedNameSpecifier](classclang%5F1%5F1NestedNameSpecifier.html "Represents a C++ nested name specifier, such as "\::std::vector<int>::".") needed to access it (C++ only). The [TypoCorrection](classclang%5F1%5F1TypoCorrection.html "Simple class containing the result of Sema::CorrectTypo.") is empty if there is no correction.

Note

LookupKind must correspond to a valid Sema::LookupNameKind

[ExternalSemaSource::CorrectTypo](classclang%5F1%5F1ExternalSemaSource.html#a3febc2b905546ca1fc38ada315b6a0ed "Try to "correct" a typo in the source code by finding visible declarations whose names are similar to...") is always given the first chance to correct a typo (really, to offer suggestions to repair a failed lookup). It will even be called when SpellChecking is turned off or after a fatal error has already been detected.

Note

Returns the first nonempty correction.

Reimplemented from clang::ExternalSemaSource.

Definition at line 339 of file MultiplexExternalSemaSource.cpp.

References clang::C, CorrectTypo(), and E.

Referenced by CorrectTypo().

bool MultiplexExternalSemaSource::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 ) overridevirtual

Perform layout on the given record.

This routine allows the external AST source to provide an specific layout for a record, overriding the layout that would normally be constructed. It is intended for clients who receive specific layout details rather than source code (such as LLDB). The client is expected to fill in the field offsets, base offsets, virtual base offsets, and complete object size.

Parameters

Record The record whose layout is being requested.
Size The final size of the record, in bits.
Alignment The final alignment of the record, in bits.
FieldOffsets The offset of each of the fields within the record, expressed in bits. All of the fields must be provided with offsets.
BaseOffsets The offset of each of the direct, non-virtual base classes. If any bases are not given offsets, the bases will be laid out according to the ABI.
VirtualBaseOffsets The offset of each of the virtual base classes (either direct or not). If any bases are not given offsets, the bases will be laid out according to the ABI.

Returns

true if the record layout was provided, false otherwise.

Reimplemented from clang::ExternalASTSource.

Definition at line 199 of file MultiplexExternalSemaSource.cpp.

References layoutRecordType().

Referenced by layoutRecordType().