本文整理汇总了C++中ExternalASTSource::FindExternalLexicalDecls方法的典型用法代码示例。如果您正苦于以下问题:C++ ExternalASTSource::FindExternalLexicalDecls方法的具体用法?C++ ExternalASTSource::FindExternalLexicalDecls怎么用?C++ ExternalASTSource::FindExternalLexicalDecls使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExternalASTSource
的用法示例。
在下文中一共展示了ExternalASTSource::FindExternalLexicalDecls方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ADeclContext
/// \brief Load the declarations within this lexical storage from an
/// external source.
void
DeclContext::LoadLexicalDeclsFromExternalStorage() const {
ExternalASTSource *Source = getParentASTContext().getExternalSource();
assert(hasExternalLexicalStorage() && Source && "No external storage?");
// Notify that we have a DeclContext that is initializing.
ExternalASTSource::Deserializing ADeclContext(Source);
llvm::SmallVector<Decl*, 64> Decls;
if (Source->FindExternalLexicalDecls(this, Decls))
return;
// There is no longer any lexical storage in this context
ExternalLexicalStorage = false;
if (Decls.empty())
return;
// We may have already loaded just the fields of this record, in which case
// don't add the decls, just replace the FirstDecl/LastDecl chain.
if (const RecordDecl *RD = dyn_cast<RecordDecl>(this))
if (RD->LoadedFieldsFromExternalStorage) {
llvm::tie(FirstDecl, LastDecl) = BuildDeclChain(Decls);
return;
}
// Splice the newly-read declarations into the beginning of the list
// of declarations.
Decl *ExternalFirst, *ExternalLast;
llvm::tie(ExternalFirst, ExternalLast) = BuildDeclChain(Decls);
ExternalLast->NextDeclInContext = FirstDecl;
FirstDecl = ExternalFirst;
if (!LastDecl)
LastDecl = ExternalLast;
}
示例2: ADeclContext
/// \brief Load the declarations within this lexical storage from an
/// external source.
void
DeclContext::LoadLexicalDeclsFromExternalStorage() const {
ExternalASTSource *Source = getParentASTContext().getExternalSource();
assert(hasExternalLexicalStorage() && Source && "No external storage?");
// Notify that we have a DeclContext that is initializing.
ExternalASTSource::Deserializing ADeclContext(Source);
llvm::SmallVector<Decl*, 64> Decls;
if (Source->FindExternalLexicalDecls(this, Decls))
return;
// There is no longer any lexical storage in this context
ExternalLexicalStorage = false;
if (Decls.empty())
return;
// Resolve all of the declaration IDs into declarations, building up
// a chain of declarations via the Decl::NextDeclInContext field.
Decl *FirstNewDecl = 0;
Decl *PrevDecl = 0;
for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
Decl *D = Decls[I];
if (PrevDecl)
PrevDecl->NextDeclInContext = D;
else
FirstNewDecl = D;
PrevDecl = D;
}
// Splice the newly-read declarations into the beginning of the list
// of declarations.
PrevDecl->NextDeclInContext = FirstDecl;
FirstDecl = FirstNewDecl;
if (!LastDecl)
LastDecl = PrevDecl;
}
示例3: ADeclContext
/// \brief Load the declarations within this lexical storage from an
/// external source.
void
DeclContext::LoadLexicalDeclsFromExternalStorage() const {
ExternalASTSource *Source = getParentASTContext().getExternalSource();
assert(hasExternalLexicalStorage() && Source && "No external storage?");
// Notify that we have a DeclContext that is initializing.
ExternalASTSource::Deserializing ADeclContext(Source);
// Load the external declarations, if any.
SmallVector<Decl*, 64> Decls;
ExternalLexicalStorage = false;
switch (Source->FindExternalLexicalDecls(this, Decls)) {
case ELR_Success:
break;
case ELR_Failure:
case ELR_AlreadyLoaded:
return;
}
if (Decls.empty())
return;
// We may have already loaded just the fields of this record, in which case
// we need to ignore them.
bool FieldsAlreadyLoaded = false;
if (const RecordDecl *RD = dyn_cast<RecordDecl>(this))
FieldsAlreadyLoaded = RD->LoadedFieldsFromExternalStorage;
// Splice the newly-read declarations into the beginning of the list
// of declarations.
Decl *ExternalFirst, *ExternalLast;
llvm::tie(ExternalFirst, ExternalLast) = BuildDeclChain(Decls,
FieldsAlreadyLoaded);
ExternalLast->NextInContextAndBits.setPointer(FirstDecl);
FirstDecl = ExternalFirst;
if (!LastDecl)
LastDecl = ExternalLast;
}