本文整理汇总了C++中ExternalASTSource::GetDecl方法的典型用法代码示例。如果您正苦于以下问题:C++ ExternalASTSource::GetDecl方法的具体用法?C++ ExternalASTSource::GetDecl怎么用?C++ ExternalASTSource::GetDecl使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExternalASTSource
的用法示例。
在下文中一共展示了ExternalASTSource::GetDecl方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: materializeDecls
void StoredDeclsList::materializeDecls(ASTContext &Context) {
if (isNull())
return;
switch ((DataKind)(Data & 0x03)) {
case DK_Decl:
case DK_Decl_Vector:
break;
case DK_DeclID: {
// Resolve this declaration ID to an actual declaration by
// querying the external AST source.
unsigned DeclID = Data >> 2;
ExternalASTSource *Source = Context.getExternalSource();
assert(Source && "No external AST source available!");
Data = reinterpret_cast<uintptr_t>(Source->GetDecl(DeclID));
break;
}
case DK_ID_Vector: {
// We have a vector of declaration IDs. Resolve all of them to
// actual declarations.
VectorTy &Vector = *getAsVector();
ExternalASTSource *Source = Context.getExternalSource();
assert(Source && "No external AST source available!");
for (unsigned I = 0, N = Vector.size(); I != N; ++I)
Vector[I] = reinterpret_cast<uintptr_t>(Source->GetDecl(Vector[I]));
Data = (Data & ~0x03) | DK_Decl_Vector;
break;
}
}
}
示例2: getParentASTContext
/// \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?");
llvm::SmallVector<uint32_t, 64> Decls;
if (Source->ReadDeclsLexicallyInContext(const_cast<DeclContext *>(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 = Source->GetDecl(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;
}