/// Constructs a ClangASTContext with an ASTContext using the given triple.
///
+ /// \param name The name for the ClangASTContext (for logging purposes)
/// \param triple The llvm::Triple used for the ASTContext. The triple defines
/// certain characteristics of the ASTContext and its types
/// (e.g., whether certain primitive types exist or what their
/// signedness is).
- explicit ClangASTContext(llvm::Triple triple);
+ explicit ClangASTContext(llvm::StringRef name, llvm::Triple triple);
/// Constructs a ClangASTContext that uses an existing ASTContext internally.
/// Useful when having an existing ASTContext created by Clang.
///
+ /// \param name The name for the ClangASTContext (for logging purposes)
/// \param existing_ctxt An existing ASTContext.
- explicit ClangASTContext(clang::ASTContext &existing_ctxt);
+ explicit ClangASTContext(llvm::StringRef name,
+ clang::ASTContext &existing_ctxt);
~ClangASTContext() override;
return llvm::dyn_cast<ClangASTContext>(&type_system_or_err.get());
}
+ /// Returns the display name of this ClangASTContext that indicates what
+ /// purpose it serves in LLDB. Used for example in logs.
+ llvm::StringRef getDisplayName() const { return m_display_name; }
+
clang::ASTContext &getASTContext();
clang::MangleContext *getMangleContext();
std::unique_ptr<clang::MangleContext> m_mangle_ctx_up;
uint32_t m_pointer_byte_size = 0;
bool m_ast_owned = false;
+ /// A string describing what this ClangASTContext represents (e.g.,
+ /// AST for debug information, an expression, some other utility ClangAST).
+ /// Useful for logging and debugging.
+ std::string m_display_name;
typedef llvm::DenseMap<const clang::Decl *, ClangASTMetadata> DeclMetadataMap;
/// Maps Decls to their associated ClangASTMetadata.
LLDB_LOG(log,
" CompleteTagDecl[{0}] on (ASTContext*){1} Completing "
"(TagDecl*){2} named {3}",
- current_id, static_cast<void *>(m_ast_context),
- static_cast<void *>(tag_decl), tag_decl->getName());
+ current_id, m_clang_ast_context->getDisplayName(), tag_decl,
+ tag_decl->getName());
LLDB_LOG(log, " CTD[%u] Before:\n{0}", current_id,
ClangUtil::DumpDecl(tag_decl));
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
LLDB_LOG(log,
- " [CompleteObjCInterfaceDecl] on (ASTContext*){0} Completing "
- "an ObjCInterfaceDecl named {1}",
- m_ast_context, interface_decl->getName());
+ " [CompleteObjCInterfaceDecl] on (ASTContext*){0} '{1}' "
+ "Completing an ObjCInterfaceDecl named {1}",
+ m_ast_context, m_clang_ast_context->getDisplayName(),
+ interface_decl->getName());
LLDB_LOG(log, " [COID] Before:\n{0}",
ClangUtil::DumpDecl(interface_decl));
if (log) {
if (const NamedDecl *context_named_decl = dyn_cast<NamedDecl>(context_decl))
LLDB_LOG(log,
- "FindExternalLexicalDecls[{0}] on (ASTContext*){1} in '{2}' "
- "(%sDecl*){3}",
- current_id, static_cast<void *>(m_ast_context),
+ "FindExternalLexicalDecls[{0}] on (ASTContext*){1} '{2}' in "
+ "'{3}' (%sDecl*){4}",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
context_named_decl->getNameAsString().c_str(),
context_decl->getDeclKindName(),
static_cast<const void *>(context_decl));
else if (context_decl)
- LLDB_LOG(
- log,
- "FindExternalLexicalDecls[{0}] on (ASTContext*){1} in ({2}Decl*){3}",
- current_id, static_cast<void *>(m_ast_context),
- context_decl->getDeclKindName(),
- static_cast<const void *>(context_decl));
+ LLDB_LOG(log,
+ "FindExternalLexicalDecls[{0}] on (ASTContext*){1} '{2}' in "
+ "({3}Decl*){4}",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ context_decl->getDeclKindName(),
+ static_cast<const void *>(context_decl));
else
- LLDB_LOG(
- log,
- "FindExternalLexicalDecls[{0}] on (ASTContext*){1} in a NULL context",
- current_id, static_cast<const void *>(m_ast_context));
+ LLDB_LOG(log,
+ "FindExternalLexicalDecls[{0}] on (ASTContext*){1} '{2}' in a "
+ "NULL context",
+ current_id, m_ast_context,
+ m_clang_ast_context->getDisplayName());
}
ClangASTImporter::DeclOrigin original = m_ast_importer_sp->GetDeclOrigin(context_decl);
if (!original.Valid())
return;
- LLDB_LOG(
- log, " FELD[{0}] Original decl (ASTContext*){1:x} (Decl*){2:x}:\n{3}",
- current_id, static_cast<void *>(original.ctx),
- static_cast<void *>(original.decl), ClangUtil::DumpDecl(original.decl));
+ LLDB_LOG(log, " FELD[{0}] Original decl {1} (Decl*){2:x}:\n{3}", current_id,
+ static_cast<void *>(original.ctx),
+ static_cast<void *>(original.decl),
+ ClangUtil::DumpDecl(original.decl));
if (ObjCInterfaceDecl *original_iface_decl =
dyn_cast<ObjCInterfaceDecl>(original.decl)) {
if (!context.m_decl_context)
LLDB_LOG(log,
"ClangASTSource::FindExternalVisibleDecls[{0}] on "
- "(ASTContext*){1} for '{2}' in a NULL DeclContext",
- current_id, m_ast_context, name);
+ "(ASTContext*){1} '{2}' for '{3}' in a NULL DeclContext",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ name);
else if (const NamedDecl *context_named_decl =
dyn_cast<NamedDecl>(context.m_decl_context))
LLDB_LOG(log,
"ClangASTSource::FindExternalVisibleDecls[{0}] on "
- "(ASTContext*){1} for '{2}' in '{3}'",
- current_id, m_ast_context, name, context_named_decl->getName());
+ "(ASTContext*){1} '{2}' for '{3}' in '{4}'",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ name, context_named_decl->getName());
else
LLDB_LOG(log,
"ClangASTSource::FindExternalVisibleDecls[{0}] on "
- "(ASTContext*){1} for '{2}' in a '{3}'",
- current_id, m_ast_context, name,
- context.m_decl_context->getDeclKindName());
+ "(ASTContext*){1} '{2}' for '{3}' in a '{4}'",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ name, context.m_decl_context->getDeclKindName());
}
context.m_namespace_map = std::make_shared<ClangASTImporter::NamespaceMap>();
ConstString selector_name(ss.GetString());
LLDB_LOG(log,
- "ClangASTSource::FindObjCMethodDecls[{0}] on (ASTContext*){1} "
- "for selector [{2} {3}]",
- current_id, m_ast_context, interface_decl->getName(), selector_name);
+ "ClangASTSource::FindObjCMethodDecls[{0}] on (ASTContext*){1} '{2}' "
+ "for selector [{3} {4}]",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ interface_decl->getName(), selector_name);
SymbolContextList sc_list;
const bool include_symbols = false;
LLDB_LOG(log,
"ClangASTSource::FindObjCPropertyAndIvarDecls[{0}] on "
- "(ASTContext*){1} for '{2}.{3}'",
- current_id, m_ast_context, parser_iface_decl->getName(),
- context.m_decl_name.getAsString());
+ "(ASTContext*){1} '{2}' for '{3}.{4}'",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ parser_iface_decl->getName(), context.m_decl_name.getAsString());
if (FindObjCPropertyAndIvarDeclsWithOrigin(
current_id, context, *this, origin_iface_decl))
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
LLDB_LOG(log,
- "LayoutRecordType[{0}] on (ASTContext*){1} for (RecordDecl*){2} "
- "[name = '{3}']",
- current_id, m_ast_context, record, record->getName());
+ "LayoutRecordType[{0}] on (ASTContext*){1} '{2}' for (RecordDecl*)"
+ "{3} [name = '{4}']",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ record, record->getName());
DeclFromParser<const RecordDecl> parser_record(record);
DeclFromUser<const RecordDecl> origin_record(
if (log) {
if (parent_map && parent_map->size())
LLDB_LOG(log,
- "CompleteNamespaceMap[{0}] on (ASTContext*){1} Searching for "
- "namespace {2} in namespace {3}",
- current_id, m_ast_context, name,
- parent_map->begin()->second.GetName());
+ "CompleteNamespaceMap[{0}] on (ASTContext*){1} '{2}' Searching "
+ "for namespace {3} in namespace {4}",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ name, parent_map->begin()->second.GetName());
else
LLDB_LOG(log,
- "CompleteNamespaceMap[{0}] on (ASTContext*){1} Searching for "
- "namespace {2}",
- current_id, m_ast_context, name);
+ "CompleteNamespaceMap[{0}] on (ASTContext*){1} '{2}' Searching "
+ "for namespace {3}",
+ current_id, m_ast_context, m_clang_ast_context->getDisplayName(),
+ name);
}
if (parent_map) {
Opts.NoInlineDefine = !Opt;
}
-ClangASTContext::ClangASTContext(llvm::Triple target_triple) {
+ClangASTContext::ClangASTContext(llvm::StringRef name,
+ llvm::Triple target_triple) {
+ m_display_name = name.str();
if (!target_triple.str().empty())
SetTargetTriple(target_triple.str());
// The caller didn't pass an ASTContext so create a new one for this
CreateASTContext();
}
-ClangASTContext::ClangASTContext(ASTContext &existing_ctxt) {
+ClangASTContext::ClangASTContext(llvm::StringRef name,
+ ASTContext &existing_ctxt) {
+ m_display_name = name.str();
SetTargetTriple(existing_ctxt.getTargetInfo().getTriple().str());
m_ast_up.reset(&existing_ctxt);
}
}
- if (module)
- return std::make_shared<ClangASTContext>(triple);
- else if (target && target->IsValid())
+ if (module) {
+ std::string ast_name =
+ "ASTContext for '" + module->GetFileSpec().GetPath() + "'";
+ return std::make_shared<ClangASTContext>(ast_name, triple);
+ } else if (target && target->IsValid())
return std::make_shared<ClangASTContextForExpressions>(*target, triple);
return lldb::TypeSystemSP();
}
ClangASTContextForExpressions::ClangASTContextForExpressions(
Target &target, llvm::Triple triple)
- : ClangASTContext(triple), m_target_wp(target.shared_from_this()),
+ : ClangASTContext("scratch ASTContext", triple),
+ m_target_wp(target.shared_from_this()),
m_persistent_variables(new ClangPersistentVariables) {
m_scratch_ast_source_up.reset(new ClangASTSource(
target.shared_from_this(), target.GetClangASTImporter()));