Skip to content

Commit b656915

Browse files
authored
[lldb][Format][NFCI] Refactor CPlusPlusLanguage::GetFunctionDisplayName into helpers and use LLVM style (llvm#135331)
Same cleanup as in llvm#135031. It pretty much is the same code that we had to duplicate in the language plugin. Maybe eventually we'll find a way of getting rid of the duplication.
1 parent b99a2b6 commit b656915

File tree

1 file changed

+77
-53
lines changed

1 file changed

+77
-53
lines changed

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

+77-53
Original file line numberDiff line numberDiff line change
@@ -1697,65 +1697,89 @@ bool CPlusPlusLanguage::IsSourceFile(llvm::StringRef file_path) const {
16971697
return file_path.contains("/usr/include/c++/");
16981698
}
16991699

1700+
static VariableListSP GetFunctionVariableList(const SymbolContext &sc) {
1701+
assert(sc.function);
1702+
1703+
if (sc.block)
1704+
if (Block *inline_block = sc.block->GetContainingInlinedBlock())
1705+
return inline_block->GetBlockVariableList(true);
1706+
1707+
return sc.function->GetBlock(true).GetBlockVariableList(true);
1708+
}
1709+
1710+
static char const *GetInlinedFunctionName(const SymbolContext &sc) {
1711+
if (!sc.block)
1712+
return nullptr;
1713+
1714+
const Block *inline_block = sc.block->GetContainingInlinedBlock();
1715+
if (!inline_block)
1716+
return nullptr;
1717+
1718+
const InlineFunctionInfo *inline_info =
1719+
inline_block->GetInlinedFunctionInfo();
1720+
if (!inline_info)
1721+
return nullptr;
1722+
1723+
return inline_info->GetName().AsCString(nullptr);
1724+
}
1725+
1726+
static bool PrintFunctionNameWithArgs(Stream &s,
1727+
const ExecutionContext *exe_ctx,
1728+
const SymbolContext &sc) {
1729+
assert(sc.function);
1730+
1731+
ExecutionContextScope *exe_scope =
1732+
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
1733+
1734+
const char *cstr = sc.function->GetName().AsCString(nullptr);
1735+
if (!cstr)
1736+
return false;
1737+
1738+
if (const char *inlined_name = GetInlinedFunctionName(sc)) {
1739+
s.PutCString(cstr);
1740+
s.PutCString(" [inlined] ");
1741+
cstr = inlined_name;
1742+
}
1743+
1744+
VariableList args;
1745+
if (auto variable_list_sp = GetFunctionVariableList(sc))
1746+
variable_list_sp->AppendVariablesWithScope(eValueTypeVariableArgument,
1747+
args);
1748+
1749+
if (args.GetSize() > 0)
1750+
return PrettyPrintFunctionNameWithArgs(s, cstr, exe_scope, args);
1751+
1752+
// FIXME: can we just unconditionally call PrettyPrintFunctionNameWithArgs?
1753+
// It should be able to handle the "no arguments" case.
1754+
s.PutCString(cstr);
1755+
1756+
return true;
1757+
}
1758+
17001759
bool CPlusPlusLanguage::GetFunctionDisplayName(
17011760
const SymbolContext *sc, const ExecutionContext *exe_ctx,
17021761
FunctionNameRepresentation representation, Stream &s) {
17031762
switch (representation) {
17041763
case FunctionNameRepresentation::eNameWithArgs: {
1764+
assert(sc);
1765+
17051766
// Print the function name with arguments in it
1706-
if (sc->function) {
1707-
ExecutionContextScope *exe_scope =
1708-
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
1709-
const char *cstr = sc->function->GetName().AsCString(nullptr);
1710-
if (cstr) {
1711-
const InlineFunctionInfo *inline_info = nullptr;
1712-
VariableListSP variable_list_sp;
1713-
bool get_function_vars = true;
1714-
if (sc->block) {
1715-
Block *inline_block = sc->block->GetContainingInlinedBlock();
1716-
1717-
if (inline_block) {
1718-
get_function_vars = false;
1719-
inline_info = inline_block->GetInlinedFunctionInfo();
1720-
if (inline_info)
1721-
variable_list_sp = inline_block->GetBlockVariableList(true);
1722-
}
1723-
}
1724-
1725-
if (get_function_vars) {
1726-
variable_list_sp =
1727-
sc->function->GetBlock(true).GetBlockVariableList(true);
1728-
}
1729-
1730-
if (inline_info) {
1731-
s.PutCString(cstr);
1732-
s.PutCString(" [inlined] ");
1733-
cstr = inline_info->GetName().GetCString();
1734-
}
1735-
1736-
VariableList args;
1737-
if (variable_list_sp)
1738-
variable_list_sp->AppendVariablesWithScope(eValueTypeVariableArgument,
1739-
args);
1740-
if (args.GetSize() > 0) {
1741-
if (!PrettyPrintFunctionNameWithArgs(s, cstr, exe_scope, args))
1742-
return false;
1743-
} else {
1744-
s.PutCString(cstr);
1745-
}
1746-
return true;
1747-
}
1748-
} else if (sc->symbol) {
1749-
const char *cstr = sc->symbol->GetName().AsCString(nullptr);
1750-
if (cstr) {
1751-
s.PutCString(cstr);
1752-
return true;
1753-
}
1754-
}
1755-
} break;
1756-
default:
1767+
if (sc->function)
1768+
return PrintFunctionNameWithArgs(s, exe_ctx, *sc);
1769+
1770+
if (!sc->symbol)
1771+
return false;
1772+
1773+
const char *cstr = sc->symbol->GetName().AsCString(nullptr);
1774+
if (!cstr)
1775+
return false;
1776+
1777+
s.PutCString(cstr);
1778+
1779+
return true;
1780+
}
1781+
case FunctionNameRepresentation::eNameWithNoArgs:
1782+
case FunctionNameRepresentation::eName:
17571783
return false;
17581784
}
1759-
1760-
return false;
17611785
}

0 commit comments

Comments
 (0)