[Lldb-commits] [lldb] r333264 - ManualDWARFIndex: reduce long parameter lists
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Fri May 25 02:55:51 PDT 2018
Author: labath
Date: Fri May 25 02:55:51 2018
New Revision: 333264
URL: http://llvm.org/viewvc/llvm-project?rev=333264&view=rev
Log:
ManualDWARFIndex: reduce long parameter lists
Several functions were passing a list of 8 NameToDIE arguments around.
This puts those variables in a struct and passes that instead, reducing
code duplication and the possibility of error (swapping two arguments
accidentally).
Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp?rev=333264&r1=333263&r2=333264&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp Fri May 25 02:55:51 2018
@@ -36,26 +36,15 @@ void ManualDWARFIndex::Index() {
if (num_compile_units == 0)
return;
- std::vector<NameToDIE> function_basenames(num_compile_units);
- std::vector<NameToDIE> function_fullnames(num_compile_units);
- std::vector<NameToDIE> function_methods(num_compile_units);
- std::vector<NameToDIE> function_selectors(num_compile_units);
- std::vector<NameToDIE> objc_class_selectors(num_compile_units);
- std::vector<NameToDIE> globals(num_compile_units);
- std::vector<NameToDIE> types(num_compile_units);
- std::vector<NameToDIE> namespaces(num_compile_units);
+ std::vector<IndexSet> sets(num_compile_units);
// std::vector<bool> might be implemented using bit test-and-set, so use
// uint8_t instead.
std::vector<uint8_t> clear_cu_dies(num_compile_units, false);
auto parser_fn = [&](size_t cu_idx) {
DWARFUnit *dwarf_cu = debug_info.GetCompileUnitAtIndex(cu_idx);
- if (dwarf_cu) {
- IndexUnit(*dwarf_cu, function_basenames[cu_idx],
- function_fullnames[cu_idx], function_methods[cu_idx],
- function_selectors[cu_idx], objc_class_selectors[cu_idx],
- globals[cu_idx], types[cu_idx], namespaces[cu_idx]);
- }
+ if (dwarf_cu)
+ IndexUnit(*dwarf_cu, sets[cu_idx]);
};
auto extract_fn = [&debug_info, &clear_cu_dies](size_t cu_idx) {
@@ -85,21 +74,21 @@ void ManualDWARFIndex::Index() {
TaskMapOverInt(0, num_compile_units, parser_fn);
- auto finalize_fn = [](NameToDIE &index, std::vector<NameToDIE> &srcs) {
- for (auto &src : srcs)
- index.Append(src);
- index.Finalize();
+ auto finalize_fn = [this, &sets](NameToDIE(IndexSet::*index)) {
+ NameToDIE &result = m_set.*index;
+ for (auto &set : sets)
+ result.Append(set.*index);
+ result.Finalize();
};
- TaskPool::RunTasks(
- [&]() { finalize_fn(m_function_basenames, function_basenames); },
- [&]() { finalize_fn(m_function_fullnames, function_fullnames); },
- [&]() { finalize_fn(m_function_methods, function_methods); },
- [&]() { finalize_fn(m_function_selectors, function_selectors); },
- [&]() { finalize_fn(m_objc_class_selectors, objc_class_selectors); },
- [&]() { finalize_fn(m_globals, globals); },
- [&]() { finalize_fn(m_types, types); },
- [&]() { finalize_fn(m_namespaces, namespaces); });
+ TaskPool::RunTasks([&]() { finalize_fn(&IndexSet::function_basenames); },
+ [&]() { finalize_fn(&IndexSet::function_fullnames); },
+ [&]() { finalize_fn(&IndexSet::function_methods); },
+ [&]() { finalize_fn(&IndexSet::function_selectors); },
+ [&]() { finalize_fn(&IndexSet::objc_class_selectors); },
+ [&]() { finalize_fn(&IndexSet::globals); },
+ [&]() { finalize_fn(&IndexSet::types); },
+ [&]() { finalize_fn(&IndexSet::namespaces); });
//----------------------------------------------------------------------
// Keep memory down by clearing DIEs for any compile units if indexing
@@ -111,13 +100,7 @@ void ManualDWARFIndex::Index() {
}
}
-void ManualDWARFIndex::IndexUnit(DWARFUnit &unit, NameToDIE &func_basenames,
- NameToDIE &func_fullnames,
- NameToDIE &func_methods,
- NameToDIE &func_selectors,
- NameToDIE &objc_class_selectors,
- NameToDIE &globals, NameToDIE &types,
- NameToDIE &namespaces) {
+void ManualDWARFIndex::IndexUnit(DWARFUnit &unit, IndexSet &set) {
Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_LOOKUPS);
if (log) {
@@ -129,26 +112,19 @@ void ManualDWARFIndex::IndexUnit(DWARFUn
const LanguageType cu_language = unit.GetLanguageType();
DWARFFormValue::FixedFormSizes fixed_form_sizes = unit.GetFixedFormSizes();
- IndexUnitImpl(unit, cu_language, fixed_form_sizes, unit.GetOffset(),
- func_basenames, func_fullnames, func_methods, func_selectors,
- objc_class_selectors, globals, types, namespaces);
+ IndexUnitImpl(unit, cu_language, fixed_form_sizes, unit.GetOffset(), set);
SymbolFileDWARFDwo *dwo_symbol_file = unit.GetDwoSymbolFile();
if (dwo_symbol_file && dwo_symbol_file->GetCompileUnit()) {
IndexUnitImpl(*dwo_symbol_file->GetCompileUnit(), cu_language,
- fixed_form_sizes, unit.GetOffset(), func_basenames,
- func_fullnames, func_methods, func_selectors,
- objc_class_selectors, globals, types, namespaces);
+ fixed_form_sizes, unit.GetOffset(), set);
}
}
void ManualDWARFIndex::IndexUnitImpl(
DWARFUnit &unit, const LanguageType cu_language,
const DWARFFormValue::FixedFormSizes &fixed_form_sizes,
- const dw_offset_t cu_offset, NameToDIE &func_basenames,
- NameToDIE &func_fullnames, NameToDIE &func_methods,
- NameToDIE &func_selectors, NameToDIE &objc_class_selectors,
- NameToDIE &globals, NameToDIE &types, NameToDIE &namespaces) {
+ const dw_offset_t cu_offset, IndexSet &set) {
for (const DWARFDebugInfoEntry &die : unit.dies()) {
const dw_tag_t tag = die.Tag();
@@ -291,21 +267,23 @@ void ManualDWARFIndex::IndexUnitImpl(
ConstString objc_fullname_no_category_name(
objc_method.GetFullNameWithoutCategory(true));
ConstString objc_class_name_no_category(objc_method.GetClassName());
- func_fullnames.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
- if (objc_class_name_with_category)
- objc_class_selectors.Insert(objc_class_name_with_category,
+ set.function_fullnames.Insert(ConstString(name),
DIERef(cu_offset, die.GetOffset()));
+ if (objc_class_name_with_category)
+ set.objc_class_selectors.Insert(
+ objc_class_name_with_category,
+ DIERef(cu_offset, die.GetOffset()));
if (objc_class_name_no_category &&
objc_class_name_no_category != objc_class_name_with_category)
- objc_class_selectors.Insert(objc_class_name_no_category,
- DIERef(cu_offset, die.GetOffset()));
+ set.objc_class_selectors.Insert(
+ objc_class_name_no_category,
+ DIERef(cu_offset, die.GetOffset()));
if (objc_selector_name)
- func_selectors.Insert(objc_selector_name,
- DIERef(cu_offset, die.GetOffset()));
+ set.function_selectors.Insert(objc_selector_name,
+ DIERef(cu_offset, die.GetOffset()));
if (objc_fullname_no_category_name)
- func_fullnames.Insert(objc_fullname_no_category_name,
- DIERef(cu_offset, die.GetOffset()));
+ set.function_fullnames.Insert(objc_fullname_no_category_name,
+ DIERef(cu_offset, die.GetOffset()));
}
// If we have a mangled name, then the DW_AT_name attribute is
// usually the method name without the class or any parameters
@@ -328,15 +306,15 @@ void ManualDWARFIndex::IndexUnitImpl(
}
if (is_method)
- func_methods.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_methods.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
else
- func_basenames.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_basenames.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
if (!is_method && !mangled_cstr && !objc_method.IsValid(true))
- func_fullnames.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_fullnames.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
}
if (mangled_cstr) {
// Make sure our mangled name isn't the same string table entry as
@@ -346,8 +324,8 @@ void ManualDWARFIndex::IndexUnitImpl(
if (name && name != mangled_cstr &&
((mangled_cstr[0] == '_') ||
(::strcmp(name, mangled_cstr) != 0))) {
- func_fullnames.Insert(ConstString(mangled_cstr),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_fullnames.Insert(ConstString(mangled_cstr),
+ DIERef(cu_offset, die.GetOffset()));
}
}
}
@@ -356,8 +334,8 @@ void ManualDWARFIndex::IndexUnitImpl(
case DW_TAG_inlined_subroutine:
if (has_address) {
if (name)
- func_basenames.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_basenames.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
if (mangled_cstr) {
// Make sure our mangled name isn't the same string table entry as
// our name. If it starts with '_', then it is ok, else compare the
@@ -366,12 +344,12 @@ void ManualDWARFIndex::IndexUnitImpl(
if (name && name != mangled_cstr &&
((mangled_cstr[0] == '_') ||
(::strcmp(name, mangled_cstr) != 0))) {
- func_fullnames.Insert(ConstString(mangled_cstr),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_fullnames.Insert(ConstString(mangled_cstr),
+ DIERef(cu_offset, die.GetOffset()));
}
} else
- func_fullnames.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.function_fullnames.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
}
break;
@@ -387,21 +365,22 @@ void ManualDWARFIndex::IndexUnitImpl(
case DW_TAG_union_type:
case DW_TAG_unspecified_type:
if (name && !is_declaration)
- types.Insert(ConstString(name), DIERef(cu_offset, die.GetOffset()));
+ set.types.Insert(ConstString(name), DIERef(cu_offset, die.GetOffset()));
if (mangled_cstr && !is_declaration)
- types.Insert(ConstString(mangled_cstr),
- DIERef(cu_offset, die.GetOffset()));
+ set.types.Insert(ConstString(mangled_cstr),
+ DIERef(cu_offset, die.GetOffset()));
break;
case DW_TAG_namespace:
if (name)
- namespaces.Insert(ConstString(name),
- DIERef(cu_offset, die.GetOffset()));
+ set.namespaces.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
break;
case DW_TAG_variable:
if (name && has_location_or_const_value && is_global_or_static_variable) {
- globals.Insert(ConstString(name), DIERef(cu_offset, die.GetOffset()));
+ set.globals.Insert(ConstString(name),
+ DIERef(cu_offset, die.GetOffset()));
// Be sure to include variables by their mangled and demangled names if
// they have any since a variable can have a basename "i", a mangled
// named "_ZN12_GLOBAL__N_11iE" and a demangled mangled name
@@ -414,11 +393,11 @@ void ManualDWARFIndex::IndexUnitImpl(
if (mangled_cstr && name != mangled_cstr &&
((mangled_cstr[0] == '_') || (::strcmp(name, mangled_cstr) != 0))) {
Mangled mangled(ConstString(mangled_cstr), true);
- globals.Insert(mangled.GetMangledName(),
- DIERef(cu_offset, die.GetOffset()));
+ set.globals.Insert(mangled.GetMangledName(),
+ DIERef(cu_offset, die.GetOffset()));
ConstString demangled = mangled.GetDemangledName(cu_language);
if (demangled)
- globals.Insert(demangled, DIERef(cu_offset, die.GetOffset()));
+ set.globals.Insert(demangled, DIERef(cu_offset, die.GetOffset()));
}
}
break;
@@ -431,48 +410,48 @@ void ManualDWARFIndex::IndexUnitImpl(
void ManualDWARFIndex::GetGlobalVariables(ConstString name, DIEArray &offsets) {
Index();
- m_globals.Find(name, offsets);
+ m_set.globals.Find(name, offsets);
}
void ManualDWARFIndex::GetGlobalVariables(const RegularExpression ®ex,
DIEArray &offsets) {
Index();
- m_globals.Find(regex, offsets);
+ m_set.globals.Find(regex, offsets);
}
void ManualDWARFIndex::GetGlobalVariables(const DWARFUnit &cu,
DIEArray &offsets) {
Index();
- m_globals.FindAllEntriesForCompileUnit(cu.GetOffset(), offsets);
+ m_set.globals.FindAllEntriesForCompileUnit(cu.GetOffset(), offsets);
}
void ManualDWARFIndex::GetObjCMethods(ConstString class_name,
DIEArray &offsets) {
Index();
- m_objc_class_selectors.Find(class_name, offsets);
+ m_set.objc_class_selectors.Find(class_name, offsets);
}
void ManualDWARFIndex::GetCompleteObjCClass(ConstString class_name,
bool must_be_implementation,
DIEArray &offsets) {
Index();
- m_types.Find(class_name, offsets);
+ m_set.types.Find(class_name, offsets);
}
void ManualDWARFIndex::GetTypes(ConstString name, DIEArray &offsets) {
Index();
- m_types.Find(name, offsets);
+ m_set.types.Find(name, offsets);
}
void ManualDWARFIndex::GetTypes(const DWARFDeclContext &context,
DIEArray &offsets) {
Index();
- m_types.Find(ConstString(context[0].name), offsets);
+ m_set.types.Find(ConstString(context[0].name), offsets);
}
void ManualDWARFIndex::GetNamespaces(ConstString name, DIEArray &offsets) {
Index();
- m_namespaces.Find(name, offsets);
+ m_set.namespaces.Find(name, offsets);
}
void ManualDWARFIndex::GetFunctions(
@@ -490,9 +469,9 @@ void ManualDWARFIndex::GetFunctions(
std::set<const DWARFDebugInfoEntry *> resolved_dies;
DIEArray offsets;
if (name_type_mask & eFunctionNameTypeFull) {
- uint32_t num_matches = m_function_basenames.Find(name, offsets);
- num_matches += m_function_methods.Find(name, offsets);
- num_matches += m_function_fullnames.Find(name, offsets);
+ uint32_t num_matches = m_set.function_basenames.Find(name, offsets);
+ num_matches += m_set.function_methods.Find(name, offsets);
+ num_matches += m_set.function_fullnames.Find(name, offsets);
for (uint32_t i = 0; i < num_matches; i++) {
const DIERef &die_ref = offsets[i];
DWARFDIE die = info.GetDIE(die_ref);
@@ -509,7 +488,7 @@ void ManualDWARFIndex::GetFunctions(
offsets.clear();
}
if (name_type_mask & eFunctionNameTypeBase) {
- uint32_t num_base = m_function_basenames.Find(name, offsets);
+ uint32_t num_base = m_set.function_basenames.Find(name, offsets);
for (uint32_t i = 0; i < num_base; i++) {
DWARFDIE die = info.GetDIE(offsets[i]);
if (die) {
@@ -530,7 +509,7 @@ void ManualDWARFIndex::GetFunctions(
if (parent_decl_ctx && parent_decl_ctx->IsValid())
return; // no methods in namespaces
- uint32_t num_base = m_function_methods.Find(name, offsets);
+ uint32_t num_base = m_set.function_methods.Find(name, offsets);
{
for (uint32_t i = 0; i < num_base; i++) {
DWARFDIE die = info.GetDIE(offsets[i]);
@@ -548,7 +527,7 @@ void ManualDWARFIndex::GetFunctions(
if ((name_type_mask & eFunctionNameTypeSelector) &&
(!parent_decl_ctx || !parent_decl_ctx->IsValid())) {
- uint32_t num_selectors = m_function_selectors.Find(name, offsets);
+ uint32_t num_selectors = m_set.function_selectors.Find(name, offsets);
for (uint32_t i = 0; i < num_selectors; i++) {
DWARFDIE die = info.GetDIE(offsets[i]);
if (die) {
@@ -571,8 +550,8 @@ void ManualDWARFIndex::GetFunctions(
Index();
DIEArray offsets;
- m_function_basenames.Find(regex, offsets);
- m_function_fullnames.Find(regex, offsets);
+ m_set.function_basenames.Find(regex, offsets);
+ m_set.function_fullnames.Find(regex, offsets);
ParseFunctions(offsets, info, resolve_function, include_inlines, sc_list);
}
@@ -581,19 +560,19 @@ void ManualDWARFIndex::Dump(Stream &s) {
m_module.GetArchitecture().GetArchitectureName(),
m_module.GetObjectFile()->GetFileSpec());
s.Printf("\nFunction basenames:\n");
- m_function_basenames.Dump(&s);
+ m_set.function_basenames.Dump(&s);
s.Printf("\nFunction fullnames:\n");
- m_function_fullnames.Dump(&s);
+ m_set.function_fullnames.Dump(&s);
s.Printf("\nFunction methods:\n");
- m_function_methods.Dump(&s);
+ m_set.function_methods.Dump(&s);
s.Printf("\nFunction selectors:\n");
- m_function_selectors.Dump(&s);
+ m_set.function_selectors.Dump(&s);
s.Printf("\nObjective C class selectors:\n");
- m_objc_class_selectors.Dump(&s);
+ m_set.objc_class_selectors.Dump(&s);
s.Printf("\nGlobals and statics:\n");
- m_globals.Dump(&s);
+ m_set.globals.Dump(&s);
s.Printf("\nTypes:\n");
- m_types.Dump(&s);
+ m_set.types.Dump(&s);
s.Printf("\nNamespaces:\n");
- m_namespaces.Dump(&s);
+ m_set.namespaces.Dump(&s);
}
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h?rev=333264&r1=333263&r2=333264&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h Fri May 25 02:55:51 2018
@@ -52,31 +52,28 @@ public:
void Dump(Stream &s) override;
private:
+ struct IndexSet {
+ NameToDIE function_basenames;
+ NameToDIE function_fullnames;
+ NameToDIE function_methods;
+ NameToDIE function_selectors;
+ NameToDIE objc_class_selectors;
+ NameToDIE globals;
+ NameToDIE types;
+ NameToDIE namespaces;
+ };
void Index();
- void IndexUnit(DWARFUnit &unit, NameToDIE &func_basenames,
- NameToDIE &func_fullnames, NameToDIE &func_methods,
- NameToDIE &func_selectors, NameToDIE &objc_class_selectors,
- NameToDIE &globals, NameToDIE &types, NameToDIE &namespaces);
+ void IndexUnit(DWARFUnit &unit, IndexSet &set);
static void
IndexUnitImpl(DWARFUnit &unit, const lldb::LanguageType cu_language,
const DWARFFormValue::FixedFormSizes &fixed_form_sizes,
- const dw_offset_t cu_offset, NameToDIE &func_basenames,
- NameToDIE &func_fullnames, NameToDIE &func_methods,
- NameToDIE &func_selectors, NameToDIE &objc_class_selectors,
- NameToDIE &globals, NameToDIE &types, NameToDIE &namespaces);
+ const dw_offset_t cu_offset, IndexSet &set);
/// Non-null value means we haven't built the index yet.
DWARFDebugInfo *m_debug_info;
- NameToDIE m_function_basenames;
- NameToDIE m_function_fullnames;
- NameToDIE m_function_methods;
- NameToDIE m_function_selectors;
- NameToDIE m_objc_class_selectors;
- NameToDIE m_globals;
- NameToDIE m_types;
- NameToDIE m_namespaces;
+ IndexSet m_set;
};
} // namespace lldb_private
More information about the lldb-commits
mailing list