Skip to content

Commit 6ce0b4e

Browse files
committed
fixup! rename setting; handle for inline frame names; remove highlighting for now
1 parent 77e2d36 commit 6ce0b4e

File tree

7 files changed

+101
-80
lines changed

7 files changed

+101
-80
lines changed

lldb/include/lldb/Symbol/SymbolContext.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,7 @@ class SymbolContext {
311311
/// mangling preference. If this object represents an inlined function,
312312
/// returns the name of the inlined function. Returns nullptr if no function
313313
/// name could be determined.
314-
const char *GetPossiblyInlinedFunctionName(
315-
Mangled::NamePreference mangling_preference) const;
314+
Mangled GetPossiblyInlinedFunctionName() const;
316315

317316
// Member variables
318317
lldb::TargetSP target_sp; ///< The Target for a given query

lldb/source/Core/FormatEntity.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ constexpr Definition g_function_child_entries[] = {
129129
Definition("arguments", EntryType::FunctionArguments),
130130
Definition("return-left", EntryType::FunctionReturnLeft),
131131
Definition("return-right", EntryType::FunctionReturnRight),
132-
Definition("qualifiers", EntryType::FunctionQualifiers)};
132+
Definition("qualifiers", EntryType::FunctionQualifiers),
133+
};
133134

134135
constexpr Definition g_line_child_entries[] = {
135136
Entry::DefinitionWithChildren("file", EntryType::LineEntryFile,
@@ -1179,8 +1180,9 @@ static bool PrintFunctionNameWithArgs(Stream &s,
11791180
ExecutionContextScope *exe_scope =
11801181
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
11811182

1182-
const char *cstr =
1183-
sc.GetPossiblyInlinedFunctionName(Mangled::ePreferDemangled);
1183+
const char *cstr = sc.GetPossiblyInlinedFunctionName()
1184+
.GetName(Mangled::ePreferDemangled)
1185+
.AsCString();
11841186
if (!cstr)
11851187
return false;
11861188

@@ -1765,8 +1767,9 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
17651767
return true;
17661768
}
17671769

1768-
const char *name = sc->GetPossiblyInlinedFunctionName(
1769-
Mangled::NamePreference::ePreferDemangled);
1770+
const char *name = sc->GetPossiblyInlinedFunctionName()
1771+
.GetName(Mangled::NamePreference::ePreferDemangled)
1772+
.AsCString();
17701773
if (!name)
17711774
return false;
17721775

@@ -1797,8 +1800,10 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
17971800
return true;
17981801
}
17991802

1800-
const char *name = sc->GetPossiblyInlinedFunctionName(
1801-
Mangled::NamePreference::ePreferDemangledWithoutArguments);
1803+
const char *name =
1804+
sc->GetPossiblyInlinedFunctionName()
1805+
.GetName(Mangled::NamePreference::ePreferDemangledWithoutArguments)
1806+
.AsCString();
18021807
if (!name)
18031808
return false;
18041809

@@ -1839,8 +1844,9 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
18391844
if (!sc)
18401845
return false;
18411846

1842-
const char *name = sc->GetPossiblyInlinedFunctionName(
1843-
Mangled::NamePreference::ePreferMangled);
1847+
const char *name = sc->GetPossiblyInlinedFunctionName()
1848+
.GetName(Mangled::NamePreference::ePreferMangled)
1849+
.AsCString();
18441850
if (!name)
18451851
return false;
18461852

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

Lines changed: 62 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,17 @@ static bool PrettyPrintFunctionNameWithArgs(Stream &out_stream,
209209
return true;
210210
}
211211

212-
static std::optional<llvm::StringRef> GetDemangledBasename(Function &function) {
213-
auto demangled_name = function.GetName().GetStringRef();
212+
static std::optional<llvm::StringRef>
213+
GetDemangledBasename(const SymbolContext &sc) {
214+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
215+
if (!mangled)
216+
return std::nullopt;
217+
218+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
214219
if (demangled_name.empty())
215220
return std::nullopt;
216221

217-
const std::optional<DemangledNameInfo> &info =
218-
function.GetMangled().GetDemangledInfo();
222+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
219223
if (!info)
220224
return std::nullopt;
221225

@@ -226,19 +230,21 @@ static std::optional<llvm::StringRef> GetDemangledBasename(Function &function) {
226230
assert(info->BasenameRange.first < demangled_name.size());
227231
assert(info->BasenameRange.second < demangled_name.size());
228232

229-
return demangled_name.substr(info->BasenameRange.first,
230-
info->BasenameRange.second -
231-
info->BasenameRange.first);
233+
return demangled_name.slice(info->BasenameRange.first,
234+
info->BasenameRange.second);
232235
}
233236

234237
static std::optional<llvm::StringRef>
235-
GetDemangledTemplateArguments(Function &function) {
236-
auto demangled_name = function.GetName().GetStringRef();
238+
GetDemangledTemplateArguments(const SymbolContext &sc) {
239+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
240+
if (!mangled)
241+
return std::nullopt;
242+
243+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
237244
if (demangled_name.empty())
238245
return std::nullopt;
239246

240-
const std::optional<DemangledNameInfo> &info =
241-
function.GetMangled().GetDemangledInfo();
247+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
242248
if (!info)
243249
return std::nullopt;
244250

@@ -250,19 +256,21 @@ GetDemangledTemplateArguments(Function &function) {
250256
assert(info->ArgumentsRange.first < demangled_name.size());
251257
assert(info->ArgumentsRange.first >= info->BasenameRange.second);
252258

253-
return demangled_name.substr(info->BasenameRange.second,
254-
info->ArgumentsRange.first -
255-
info->BasenameRange.second);
259+
return demangled_name.slice(info->BasenameRange.second,
260+
info->ArgumentsRange.first);
256261
}
257262

258263
static std::optional<llvm::StringRef>
259-
GetDemangledReturnTypeLHS(Function &function) {
260-
auto demangled_name = function.GetName().GetStringRef();
264+
GetDemangledReturnTypeLHS(const SymbolContext &sc) {
265+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
266+
if (!mangled)
267+
return std::nullopt;
268+
269+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
261270
if (demangled_name.empty())
262271
return std::nullopt;
263272

264-
const std::optional<DemangledNameInfo> &info =
265-
function.GetMangled().GetDemangledInfo();
273+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
266274
if (!info)
267275
return std::nullopt;
268276

@@ -276,13 +284,16 @@ GetDemangledReturnTypeLHS(Function &function) {
276284
}
277285

278286
static std::optional<llvm::StringRef>
279-
GetDemangledFunctionQualifiers(Function &function) {
280-
auto demangled_name = function.GetName().GetStringRef();
287+
GetDemangledFunctionQualifiers(const SymbolContext &sc) {
288+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
289+
if (!mangled)
290+
return std::nullopt;
291+
292+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
281293
if (demangled_name.empty())
282294
return std::nullopt;
283295

284-
const std::optional<DemangledNameInfo> &info =
285-
function.GetMangled().GetDemangledInfo();
296+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
286297
if (!info)
287298
return std::nullopt;
288299

@@ -294,19 +305,21 @@ GetDemangledFunctionQualifiers(Function &function) {
294305
assert(info->QualifiersRange.second <= demangled_name.size());
295306
assert(info->QualifiersRange.second >= info->QualifiersRange.first);
296307

297-
return demangled_name.substr(info->QualifiersRange.first,
298-
info->QualifiersRange.second -
299-
info->QualifiersRange.first);
308+
return demangled_name.slice(info->QualifiersRange.first,
309+
info->QualifiersRange.second);
300310
}
301311

302312
static std::optional<llvm::StringRef>
303-
GetDemangledReturnTypeRHS(Function &function) {
304-
auto demangled_name = function.GetName().GetStringRef();
313+
GetDemangledReturnTypeRHS(const SymbolContext &sc) {
314+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
315+
if (!mangled)
316+
return std::nullopt;
317+
318+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
305319
if (demangled_name.empty())
306320
return std::nullopt;
307321

308-
const std::optional<DemangledNameInfo> &info =
309-
function.GetMangled().GetDemangledInfo();
322+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
310323
if (!info)
311324
return std::nullopt;
312325

@@ -318,18 +331,21 @@ GetDemangledReturnTypeRHS(Function &function) {
318331
assert(info->ArgumentsRange.second <= demangled_name.size());
319332
assert(info->QualifiersRange.first >= info->ArgumentsRange.second);
320333

321-
return demangled_name.substr(info->ArgumentsRange.second,
322-
info->QualifiersRange.first -
323-
info->ArgumentsRange.second);
334+
return demangled_name.slice(info->ArgumentsRange.second,
335+
info->QualifiersRange.first);
324336
}
325337

326-
static std::optional<llvm::StringRef> GetDemangledScope(Function &function) {
327-
auto demangled_name = function.GetName().GetStringRef();
338+
static std::optional<llvm::StringRef>
339+
GetDemangledScope(const SymbolContext &sc) {
340+
Mangled mangled = sc.GetPossiblyInlinedFunctionName();
341+
if (!mangled)
342+
return std::nullopt;
343+
344+
auto demangled_name = mangled.GetDemangledName().GetStringRef();
328345
if (demangled_name.empty())
329346
return std::nullopt;
330347

331-
const std::optional<DemangledNameInfo> &info =
332-
function.GetMangled().GetDemangledInfo();
348+
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
333349
if (!info)
334350
return std::nullopt;
335351

@@ -341,8 +357,7 @@ static std::optional<llvm::StringRef> GetDemangledScope(Function &function) {
341357
assert(info->ScopeRange.second < demangled_name.size());
342358
assert(info->ScopeRange.second >= info->ScopeRange.first);
343359

344-
return demangled_name.substr(
345-
info->ScopeRange.first, info->ScopeRange.second - info->ScopeRange.first);
360+
return demangled_name.slice(info->ScopeRange.first, info->ScopeRange.second);
346361
}
347362

348363
bool CPlusPlusLanguage::MethodName::TrySimplifiedParse() {
@@ -1852,8 +1867,9 @@ static bool PrintFunctionNameWithArgs(Stream &s,
18521867
ExecutionContextScope *exe_scope =
18531868
exe_ctx ? exe_ctx->GetBestExecutionContextScope() : nullptr;
18541869

1855-
const char *cstr = sc.GetPossiblyInlinedFunctionName(
1856-
Mangled::NamePreference::ePreferDemangled);
1870+
const char *cstr = sc.GetPossiblyInlinedFunctionName()
1871+
.GetName(Mangled::NamePreference::ePreferDemangled)
1872+
.AsCString();
18571873
if (!cstr)
18581874
return false;
18591875

@@ -1906,7 +1922,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19061922

19071923
switch (type) {
19081924
case FormatEntity::Entry::Type::FunctionScope: {
1909-
std::optional<llvm::StringRef> scope = GetDemangledScope(*sc.function);
1925+
std::optional<llvm::StringRef> scope = GetDemangledScope(sc);
19101926
if (!scope)
19111927
return false;
19121928

@@ -1916,7 +1932,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19161932
}
19171933

19181934
case FormatEntity::Entry::Type::FunctionBasename: {
1919-
std::optional<llvm::StringRef> name = GetDemangledBasename(*sc.function);
1935+
std::optional<llvm::StringRef> name = GetDemangledBasename(sc);
19201936
if (!name)
19211937
return false;
19221938

@@ -1927,7 +1943,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19271943

19281944
case FormatEntity::Entry::Type::FunctionTemplateArguments: {
19291945
std::optional<llvm::StringRef> template_args =
1930-
GetDemangledTemplateArguments(*sc.function);
1946+
GetDemangledTemplateArguments(sc);
19311947
if (!template_args)
19321948
return false;
19331949

@@ -1952,8 +1968,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19521968
return true;
19531969
}
19541970
case FormatEntity::Entry::Type::FunctionReturnRight: {
1955-
std::optional<llvm::StringRef> return_rhs =
1956-
GetDemangledReturnTypeRHS(*sc.function);
1971+
std::optional<llvm::StringRef> return_rhs = GetDemangledReturnTypeRHS(sc);
19571972
if (!return_rhs)
19581973
return false;
19591974

@@ -1962,8 +1977,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19621977
return true;
19631978
}
19641979
case FormatEntity::Entry::Type::FunctionReturnLeft: {
1965-
std::optional<llvm::StringRef> return_lhs =
1966-
GetDemangledReturnTypeLHS(*sc.function);
1980+
std::optional<llvm::StringRef> return_lhs = GetDemangledReturnTypeLHS(sc);
19671981
if (!return_lhs)
19681982
return false;
19691983

@@ -1972,8 +1986,7 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19721986
return true;
19731987
}
19741988
case FormatEntity::Entry::Type::FunctionQualifiers: {
1975-
std::optional<llvm::StringRef> quals =
1976-
GetDemangledFunctionQualifiers(*sc.function);
1989+
std::optional<llvm::StringRef> quals = GetDemangledFunctionQualifiers(sc);
19771990
if (!quals)
19781991
return false;
19791992

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
include "../../../../include/lldb/Core/PropertiesBase.td"
22

33
let Definition = "language_cplusplus" in {
4-
def FrameFormat: Property<"frame-format", "FormatEntity">,
4+
def FrameFormat: Property<"function-name-format", "FormatEntity">,
55
Global,
6-
DefaultStringValue<"${function.return-left}${function.scope}${ansi.fg.cyan}${function.basename}${ansi.normal}${function.template-arguments}${function.arguments}${function.return-right}${function.qualifiers}">,
6+
DefaultStringValue<"${function.return-left}${function.scope}${function.basename}${function.template-arguments}${function.arguments}${function.return-right}${function.qualifiers}">,
77
Desc<"C++ specific frame format string to use when displaying stack frame information for threads.">;
88
}

lldb/source/Symbol/SymbolContext.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "lldb/Core/Address.h"
1212
#include "lldb/Core/Debugger.h"
13+
#include "lldb/Core/DemangledNameInfo.h"
1314
#include "lldb/Core/Module.h"
1415
#include "lldb/Core/ModuleSpec.h"
1516
#include "lldb/Host/Host.h"
@@ -872,34 +873,36 @@ const Symbol *SymbolContext::FindBestGlobalDataSymbol(ConstString name,
872873
return nullptr; // no error; we just didn't find anything
873874
}
874875

875-
char const *SymbolContext::GetPossiblyInlinedFunctionName(
876-
Mangled::NamePreference mangling_preference) const {
877-
const char *name = nullptr;
878-
if (function)
879-
name = function->GetMangled().GetName(mangling_preference).AsCString();
880-
else if (symbol)
881-
name = symbol->GetMangled().GetName(mangling_preference).AsCString();
876+
Mangled SymbolContext::GetPossiblyInlinedFunctionName() const {
877+
auto get_mangled = [this]() {
878+
if (function)
879+
return function->GetMangled();
880+
881+
if (symbol)
882+
return symbol->GetMangled();
883+
884+
return Mangled{};
885+
};
882886

883887
if (!block)
884-
return name;
888+
return get_mangled();
885889

886890
const Block *inline_block = block->GetContainingInlinedBlock();
887891
if (!inline_block)
888-
return name;
892+
return get_mangled();
889893

890894
const InlineFunctionInfo *inline_info =
891895
inline_block->GetInlinedFunctionInfo();
892896
if (!inline_info)
893-
return name;
897+
return get_mangled();
894898

895899
// If we do have an inlined frame name, return that.
896-
if (char const *inline_name =
897-
inline_info->GetMangled().GetName(mangling_preference).AsCString())
900+
if (const Mangled &inline_name = inline_info->GetMangled())
898901
return inline_name;
899902

900903
// Sometimes an inline frame may not have mangling information,
901904
// but does have a valid name.
902-
return inline_info->GetName().AsCString();
905+
return Mangled{inline_info->GetName().AsCString()};
903906
}
904907

905908
//

lldb/test/Shell/Settings/TestCxxFrameFormat.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Test the ${plugin.cplusplus.language.frame-format} setting.
1+
# Test the ${plugin.cplusplus.language.function-name-format} setting.
22

33
# RUN: split-file %s %t
44
# RUN: %build %t/main.cpp -o %t.out
@@ -32,7 +32,7 @@ int bar(int y) { func(y); }
3232
int main() { return bar(10); }
3333

3434
#--- commands.input
35-
settings set plugin.cplusplus.language.frame-format "${function.scope}${function.basename}"
35+
settings set plugin.cplusplus.language.function-name-format "${function.scope}${function.basename}"
3636
settings set -f frame-format "custom-frame '${function.name-with-args}'\n"
3737
break set -l 3
3838

@@ -43,7 +43,7 @@ bt
4343
# CHECK: custom-frame 'ns::ns2::bar'
4444
# CHECK: custom-frame 'ns::ns2::foo'
4545

46-
settings set plugin.cplusplus.language.frame-format "this affects C++ only"
46+
settings set plugin.cplusplus.language.function-name-format "this affects C++ only"
4747
bt
4848

4949
# CHECK-OBJC: bt

0 commit comments

Comments
 (0)