[Lldb-commits] [lldb] [lldb] Reduce duplication in two of DWARFDIE context functions (PR #122712)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Mon Jan 13 06:27:07 PST 2025
https://github.com/labath created https://github.com/llvm/llvm-project/pull/122712
This doesn't make much of a difference now, but it makes it easier to add -gsimple-template-names support to these functions (the idea is to add an argument to say whether you want the name as spelled in the debug info, or the one embellished with template arguments -- we have use cases for both).
>From 0966fe4c14dd4544e786bb88643f318e33601926 Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Mon, 13 Jan 2025 15:15:23 +0100
Subject: [PATCH] [lldb] Reduce duplication in two of DWARFDIE context
functions
This doesn't make much of a difference now, but it makes it easier to
add -gsimple-template-names support to these functions (the idea is to
add an argument to say whether you want the name as spelled in the debug
info, or the one embelished with template arguments.
---
.../Plugins/SymbolFile/DWARF/DWARFDIE.cpp | 67 +++++++++----------
1 file changed, 33 insertions(+), 34 deletions(-)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
index 4b864b549f8ce6..6857878b354a05 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
@@ -376,6 +376,36 @@ lldb_private::Type *DWARFDIE::ResolveTypeUID(const DWARFDIE &die) const {
return nullptr;
}
+static CompilerContext GetContextEntry(DWARFDIE die) {
+ auto ctx = [die](CompilerContextKind kind) {
+ return CompilerContext(kind, ConstString(die.GetName()));
+ };
+
+ switch (die.Tag()) {
+ case DW_TAG_module:
+ return ctx(CompilerContextKind::Module);
+ case DW_TAG_namespace:
+ return ctx(CompilerContextKind::Namespace);
+ case DW_TAG_class_type:
+ case DW_TAG_structure_type:
+ return ctx(CompilerContextKind::ClassOrStruct);
+ case DW_TAG_union_type:
+ return ctx(CompilerContextKind::Union);
+ case DW_TAG_enumeration_type:
+ return ctx(CompilerContextKind::Enum);
+ case DW_TAG_subprogram:
+ return ctx(CompilerContextKind::Function);
+ case DW_TAG_variable:
+ return ctx(CompilerContextKind::Variable);
+ case DW_TAG_typedef:
+ return ctx(CompilerContextKind::Typedef);
+ case DW_TAG_base_type:
+ return ctx(CompilerContextKind::Builtin);
+ default:
+ llvm_unreachable("Check tag type in the caller!");
+ }
+}
+
static void GetDeclContextImpl(DWARFDIE die,
llvm::SmallSet<lldb::user_id_t, 4> &seen,
std::vector<CompilerContext> &context) {
@@ -388,34 +418,17 @@ static void GetDeclContextImpl(DWARFDIE die,
}
// Add this DIE's contribution at the end of the chain.
- auto push_ctx = [&](CompilerContextKind kind, llvm::StringRef name) {
- context.push_back({kind, ConstString(name)});
- };
switch (die.Tag()) {
case DW_TAG_module:
- push_ctx(CompilerContextKind::Module, die.GetName());
- break;
case DW_TAG_namespace:
- push_ctx(CompilerContextKind::Namespace, die.GetName());
- break;
case DW_TAG_class_type:
case DW_TAG_structure_type:
- push_ctx(CompilerContextKind::ClassOrStruct, die.GetName());
- break;
case DW_TAG_union_type:
- push_ctx(CompilerContextKind::Union, die.GetName());
- break;
case DW_TAG_enumeration_type:
- push_ctx(CompilerContextKind::Enum, die.GetName());
- break;
case DW_TAG_subprogram:
- push_ctx(CompilerContextKind::Function, die.GetName());
- break;
case DW_TAG_variable:
- push_ctx(CompilerContextKind::Variable, die.GetName());
- break;
case DW_TAG_typedef:
- push_ctx(CompilerContextKind::Typedef, die.GetName());
+ context.push_back(GetContextEntry(die));
break;
default:
break;
@@ -439,32 +452,18 @@ static void GetTypeLookupContextImpl(DWARFDIE die,
// Stop if we hit a cycle.
while (die && seen.insert(die.GetID()).second) {
// Add this DIE's contribution at the end of the chain.
- auto push_ctx = [&](CompilerContextKind kind, llvm::StringRef name) {
- context.push_back({kind, ConstString(name)});
- };
switch (die.Tag()) {
case DW_TAG_namespace:
- push_ctx(CompilerContextKind::Namespace, die.GetName());
- break;
case DW_TAG_class_type:
case DW_TAG_structure_type:
- push_ctx(CompilerContextKind::ClassOrStruct, die.GetName());
- break;
case DW_TAG_union_type:
- push_ctx(CompilerContextKind::Union, die.GetName());
- break;
case DW_TAG_enumeration_type:
- push_ctx(CompilerContextKind::Enum, die.GetName());
- break;
case DW_TAG_variable:
- push_ctx(CompilerContextKind::Variable, die.GetName());
- break;
case DW_TAG_typedef:
- push_ctx(CompilerContextKind::Typedef, die.GetName());
- break;
case DW_TAG_base_type:
- push_ctx(CompilerContextKind::Builtin, die.GetName());
+ context.push_back(GetContextEntry(die));
break;
+
// If any of the tags below appear in the parent chain, stop the decl
// context and return. Prior to these being in here, if a type existed in a
// namespace "a" like "a::my_struct", but we also have a function in that
More information about the lldb-commits
mailing list