Skip to content

Commit f030f6f

Browse files
authored
[lldb][FormatEntity][NFCI] Refactor FunctionNameWithArgs into helper functions and use LLVM style (llvm#135031)
I've always found this hard to read. Some upcoming changes make similar computations, so I thought it's a good time to factor out this logic into re-usable helpers and clean it up using LLVM's preferred early-return style.
1 parent 85742f7 commit f030f6f

File tree

1 file changed

+69
-49
lines changed

1 file changed

+69
-49
lines changed

lldb/source/Core/FormatEntity.cpp

Lines changed: 69 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,64 @@ static void FormatInlinedBlock(Stream &out_stream, Block *block) {
11601160
}
11611161
}
11621162

1163+
static VariableListSP GetFunctionVariableList(const SymbolContext &sc) {
1164+
assert(sc.function);
1165+
1166+
if (sc.block)
1167+
if (Block *inline_block = sc.block->GetContainingInlinedBlock())
1168+
return inline_block->GetBlockVariableList(true);
1169+
1170+
return sc.function->GetBlock(true).GetBlockVariableList(true);
1171+
}
1172+
1173+
static char const *GetInlinedFunctionName(const SymbolContext &sc) {
1174+
if (!sc.block)
1175+
return nullptr;
1176+
1177+
const Block *inline_block = sc.block->GetContainingInlinedBlock();
1178+
if (!inline_block)
1179+
return nullptr;
1180+
1181+
const InlineFunctionInfo *inline_info =
1182+
inline_block->GetInlinedFunctionInfo();
1183+
if (!inline_info)
1184+
return nullptr;
1185+
1186+
return inline_info->GetName().AsCString(nullptr);
1187+
}
1188+
1189+
static bool PrintFunctionNameWithArgs(Stream &s,
1190+
const ExecutionContext *exe_ctx,
1191+
const SymbolContext &sc) {
1192+
assert(sc.function);
1193+
1194+
ExecutionContextScope *exe_scope =
1195+
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
1196+
1197+
const char *cstr = sc.function->GetName().AsCString(nullptr);
1198+
if (!cstr)
1199+
return false;
1200+
1201+
if (const char *inlined_name = GetInlinedFunctionName(sc)) {
1202+
s.PutCString(cstr);
1203+
s.PutCString(" [inlined] ");
1204+
cstr = inlined_name;
1205+
}
1206+
1207+
VariableList args;
1208+
if (auto variable_list_sp = GetFunctionVariableList(sc))
1209+
variable_list_sp->AppendVariablesWithScope(eValueTypeVariableArgument,
1210+
args);
1211+
1212+
if (args.GetSize() > 0) {
1213+
PrettyPrintFunctionNameWithArgs(s, cstr, exe_scope, args);
1214+
} else {
1215+
s.PutCString(cstr);
1216+
}
1217+
1218+
return true;
1219+
}
1220+
11631221
bool FormatEntity::FormatStringRef(const llvm::StringRef &format_str, Stream &s,
11641222
const SymbolContext *sc,
11651223
const ExecutionContext *exe_ctx,
@@ -1736,59 +1794,21 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
17361794
if (language_plugin_handled) {
17371795
s << ss.GetString();
17381796
return true;
1739-
} else {
1740-
// Print the function name with arguments in it
1741-
if (sc->function) {
1742-
ExecutionContextScope *exe_scope =
1743-
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
1744-
const char *cstr = sc->function->GetName().AsCString(nullptr);
1745-
if (cstr) {
1746-
const InlineFunctionInfo *inline_info = nullptr;
1747-
VariableListSP variable_list_sp;
1748-
bool get_function_vars = true;
1749-
if (sc->block) {
1750-
Block *inline_block = sc->block->GetContainingInlinedBlock();
1751-
1752-
if (inline_block) {
1753-
get_function_vars = false;
1754-
inline_info = inline_block->GetInlinedFunctionInfo();
1755-
if (inline_info)
1756-
variable_list_sp = inline_block->GetBlockVariableList(true);
1757-
}
1758-
}
1797+
}
17591798

1760-
if (get_function_vars) {
1761-
variable_list_sp =
1762-
sc->function->GetBlock(true).GetBlockVariableList(true);
1763-
}
1799+
if (sc->function)
1800+
return PrintFunctionNameWithArgs(s, exe_ctx, *sc);
17641801

1765-
if (inline_info) {
1766-
s.PutCString(cstr);
1767-
s.PutCString(" [inlined] ");
1768-
cstr = inline_info->GetName().GetCString();
1769-
}
1802+
if (!sc->symbol)
1803+
return false;
17701804

1771-
VariableList args;
1772-
if (variable_list_sp)
1773-
variable_list_sp->AppendVariablesWithScope(
1774-
eValueTypeVariableArgument, args);
1775-
if (args.GetSize() > 0) {
1776-
PrettyPrintFunctionNameWithArgs(s, cstr, exe_scope, args);
1777-
} else {
1778-
s.PutCString(cstr);
1779-
}
1780-
return true;
1781-
}
1782-
} else if (sc->symbol) {
1783-
const char *cstr = sc->symbol->GetName().AsCString(nullptr);
1784-
if (cstr) {
1785-
s.PutCString(cstr);
1786-
return true;
1787-
}
1788-
}
1789-
}
1805+
const char *cstr = sc->symbol->GetName().AsCString(nullptr);
1806+
if (!cstr)
1807+
return false;
1808+
1809+
s.PutCString(cstr);
1810+
return true;
17901811
}
1791-
return false;
17921812

17931813
case Entry::Type::FunctionMangledName: {
17941814
if (!sc)

0 commit comments

Comments
 (0)