Skip to content

Commit af544db

Browse files
committed
[lldb] Add Bool synthetic provider
Add a synthetic provider for `Swift.Bool` for these improvements: 1. Allows value objects to produce an integer value of 0 or 1 2. Eliminates the child member from `Bool` value objects Producing an integer value is useful for working with `Bool` values without having to compare to the strings `"true"` or `"false"`. Removing the child member improves how `Bool` variables are exposed in UI. A value object with child members can be expanded in UI, however `Bool` variables should be represented as a single scalar value, not a structure.
1 parent c34071e commit af544db

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

lldb/source/Plugins/Language/Swift/SwiftFormatters.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ bool lldb_private::formatters::swift::SwiftStringStorage_SummaryProvider(
623623
bool lldb_private::formatters::swift::Bool_SummaryProvider(
624624
ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
625625
static ConstString g_value("_value");
626-
ValueObjectSP value_child(valobj.GetChildMemberWithName(g_value, true));
626+
ValueObjectSP value_child(
627+
valobj.GetNonSyntheticValue()->GetChildMemberWithName(g_value, true));
627628
if (!value_child)
628629
return false;
629630

lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,9 +434,14 @@ static void LoadSwiftFormatters(lldb::TypeCategoryImplSP swift_category_sp) {
434434
"Swift.TaskGroup synthetic children",
435435
ConstString("^Swift\\.(Throwing)?TaskGroup<.+>"), synth_flags, true);
436436

437+
AddCXXSynthetic(
438+
swift_category_sp,
439+
lldb_private::formatters::swift::SwiftBasicTypeSyntheticFrontEndCreator,
440+
"Swift.Bool", ConstString("Swift.Bool"), basic_synth_flags);
437441
AddCXXSummary(
438442
swift_category_sp, lldb_private::formatters::swift::Bool_SummaryProvider,
439443
"Swift.Bool summary provider", ConstString("Swift.Bool"), summary_flags);
444+
440445
AddCXXSummary(
441446
swift_category_sp,
442447
lldb_private::formatters::swift::TypePreservingNSNumber_SummaryProvider,

lldb/test/API/lang/swift/variables/bool/TestSwiftBool.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,21 @@ def test_swift_bool(self):
2929

3030
self.assertGreater(thread.GetNumFrames(), 0)
3131
frame = thread.GetSelectedFrame()
32-
32+
3333
true_vars = ["reg_true", "odd_true", "odd_true_works", "odd_false_works"]
3434
for name in true_vars:
3535
var = frame.FindVariable(name)
3636
summary = var.GetSummary()
37-
self.assertTrue(summary == "true", "%s should be true, was: %s"%(name, summary))
37+
self.assertEqual(
38+
summary, "true", "%s should be true, was: %s" % (name, summary)
39+
)
40+
self.assertEqual(var.unsigned & 1, 1)
3841

3942
false_vars = ["reg_false", "odd_false"]
4043
for name in false_vars:
4144
var = frame.FindVariable(name)
4245
summary = var.GetSummary()
43-
self.assertTrue(summary == "false", "%s should be false, was: %s"%(name, summary))
44-
45-
46+
self.assertEqual(
47+
summary, "false", "%s should be false, was: %s" % (name, summary)
48+
)
49+
self.assertEqual(var.unsigned & 1, 0)

lldb/test/API/lang/swift/variables/optionals/TestSwiftOptionals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ def do_check_api(self):
106106
self,
107107
optTrue,
108108
use_dynamic=False,
109-
num_children=1,
109+
num_children=0,
110110
summary='true')
111111

112112
optFalse = self.frame().FindVariable("optFalse")
113113
lldbutil.check_variable(
114114
self,
115115
optFalse,
116116
use_dynamic=False,
117-
num_children=1,
117+
num_children=0,
118118
summary='false')
119119

120120
optNil = self.frame().FindVariable("optNil")

0 commit comments

Comments
 (0)