static bool GetCompleteDecl(clang::ASTContext *ast, clang::Decl *decl);
- void SetMetadataAsUserID(const void *object, lldb::user_id_t user_id);
+ void SetMetadataAsUserID(const clang::Decl *decl, lldb::user_id_t user_id);
+ void SetMetadataAsUserID(const clang::Type *type, lldb::user_id_t user_id);
- void SetMetadata(const void *object, ClangASTMetadata &meta_data);
+ void SetMetadata(const clang::Decl *object, ClangASTMetadata &meta_data);
+ void SetMetadata(const clang::Type *object, ClangASTMetadata &meta_data);
+ ClangASTMetadata *GetMetadata(const clang::Decl *object) {
+ return GetMetadata(getASTContext(), object);
+ }
+
+ static ClangASTMetadata *GetMetadata(clang::ASTContext *ast,
+ const clang::Decl *object);
- ClangASTMetadata *GetMetadata(const void *object) {
+ ClangASTMetadata *GetMetadata(const clang::Type *object) {
return GetMetadata(getASTContext(), object);
}
static ClangASTMetadata *GetMetadata(clang::ASTContext *ast,
- const void *object);
+ const clang::Type *object);
// Basic Types
CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
DeclContextGetAsNamespaceDecl(const CompilerDeclContext &dc);
static ClangASTMetadata *DeclContextGetMetaData(const CompilerDeclContext &dc,
- const void *object);
+ const clang::Decl *object);
static clang::ASTContext *
DeclContextGetClangASTContext(const CompilerDeclContext &dc);
ClangExternalASTSourceCommon();
~ClangExternalASTSourceCommon() override;
- ClangASTMetadata *GetMetadata(const void *object);
- void SetMetadata(const void *object, ClangASTMetadata &metadata);
+ ClangASTMetadata *GetMetadata(const clang::Decl *object);
+ void SetMetadata(const clang::Decl *object,
+ const ClangASTMetadata &metadata) {
+ m_decl_metadata[object] = metadata;
+ }
+
+ ClangASTMetadata *GetMetadata(const clang::Type *object);
+ void SetMetadata(const clang::Type *object,
+ const ClangASTMetadata &metadata) {
+ m_type_metadata[object] = metadata;
+ }
static ClangExternalASTSourceCommon *Lookup(clang::ExternalASTSource *source);
private:
- typedef llvm::DenseMap<const void *, ClangASTMetadata> MetadataMap;
+ typedef llvm::DenseMap<const clang::Decl *, ClangASTMetadata> DeclMetadataMap;
+ typedef llvm::DenseMap<const clang::Type *, ClangASTMetadata> TypeMetadataMap;
- MetadataMap m_metadata;
+ DeclMetadataMap m_decl_metadata;
+ TypeMetadataMap m_type_metadata;
};
} // namespace lldb_private
dwarf->GetUID(type_die), Type::eEncodingIsUID, &attrs.decl, clang_type,
Type::ResolveState::Full);
type_sp->SetEncodingType(element_type);
- m_ast.SetMetadataAsUserID(clang_type.GetOpaqueQualType(), die.GetID());
+ const clang::Type *type = ClangUtil::GetQualType(clang_type).getTypePtr();
+ m_ast.SetMetadataAsUserID(type, die.GetID());
return type_sp;
}
}
}
-void ClangASTContext::SetMetadataAsUserID(const void *object,
+void ClangASTContext::SetMetadataAsUserID(const clang::Decl *decl,
user_id_t user_id) {
ClangASTMetadata meta_data;
meta_data.SetUserID(user_id);
- SetMetadata(object, meta_data);
+ SetMetadata(decl, meta_data);
}
-void ClangASTContext::SetMetadata(const void *object,
+void ClangASTContext::SetMetadataAsUserID(const clang::Type *type,
+ user_id_t user_id) {
+ ClangASTMetadata meta_data;
+ meta_data.SetUserID(user_id);
+ SetMetadata(type, meta_data);
+}
+
+void ClangASTContext::SetMetadata(const clang::Decl *object,
+ ClangASTMetadata &metadata) {
+ ClangExternalASTSourceCommon *external_source =
+ ClangExternalASTSourceCommon::Lookup(
+ getASTContext()->getExternalSource());
+
+ if (external_source)
+ external_source->SetMetadata(object, metadata);
+}
+
+void ClangASTContext::SetMetadata(const clang::Type *object,
ClangASTMetadata &metadata) {
ClangExternalASTSourceCommon *external_source =
ClangExternalASTSourceCommon::Lookup(
}
ClangASTMetadata *ClangASTContext::GetMetadata(clang::ASTContext *ast,
- const void *object) {
+ const clang::Decl *object) {
ClangExternalASTSourceCommon *external_source =
ClangExternalASTSourceCommon::Lookup(ast->getExternalSource());
if (external_source)
return external_source->GetMetadata(object);
- else
- return nullptr;
+ return nullptr;
+}
+
+ClangASTMetadata *ClangASTContext::GetMetadata(clang::ASTContext *ast,
+ const clang::Type *object) {
+ ClangExternalASTSourceCommon *external_source =
+ ClangExternalASTSourceCommon::Lookup(ast->getExternalSource());
+
+ if (external_source)
+ return external_source->GetMetadata(object);
+ return nullptr;
}
bool ClangASTContext::SetTagTypeKind(clang::QualType tag_qual_type,
clang::QualType qual_type,
const ExecutionContext *exe_ctx) {
if (qual_type->isIncompleteArrayType())
- if (auto *metadata = ast.GetMetadata(qual_type.getAsOpaquePtr()))
+ if (auto *metadata = ast.GetMetadata(qual_type.getTypePtr()))
return sym_file->GetDynamicArrayInfoForUID(metadata->GetUserID(),
exe_ctx);
return llvm::None;
void ClangASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type) {
StreamFile s(stdout, false);
DumpTypeDescription(type, &s);
+
+ CompilerType ct(this, type);
+ const clang::Type *clang_type = ClangUtil::GetQualType(ct).getTypePtr();
ClangASTMetadata *metadata =
- ClangASTContext::GetMetadata(getASTContext(), type);
+ ClangASTContext::GetMetadata(getASTContext(), clang_type);
if (metadata) {
metadata->Dump(&s);
}
ClangASTMetadata *
ClangASTContext::DeclContextGetMetaData(const CompilerDeclContext &dc,
- const void *object) {
+ const Decl *object) {
clang::ASTContext *ast = DeclContextGetClangASTContext(dc);
if (ast)
return ClangASTContext::GetMetadata(ast, object);
}
ClangASTMetadata *
-ClangExternalASTSourceCommon::GetMetadata(const void *object) {
- auto It = m_metadata.find(object);
- if (It != m_metadata.end())
+ClangExternalASTSourceCommon::GetMetadata(const clang::Decl *object) {
+ auto It = m_decl_metadata.find(object);
+ if (It != m_decl_metadata.end())
return &It->second;
- else
- return nullptr;
+ return nullptr;
}
-void ClangExternalASTSourceCommon::SetMetadata(const void *object,
- ClangASTMetadata &metadata) {
- m_metadata[object] = metadata;
+ClangASTMetadata *
+ClangExternalASTSourceCommon::GetMetadata(const clang::Type *object) {
+ auto It = m_type_metadata.find(object);
+ if (It != m_type_metadata.end())
+ return &It->second;
+ return nullptr;
}
void ClangASTMetadata::Dump(Stream *s) {